全文检索:

将整个文本进行“分词”处理,在索引库中为分词得到的每一个词都建立索引,和用户搜索的关键词进行匹配。实现快速查找效果。

传统sql语句实现的局限性:

select song_id,song_name,song_singer,song_album

from table_song

where song_name like “%神话%” or song_album like “%神话%” or song_lyric like “%神话%”

效率低,影响性能。

数据库使用索引有无的区别:

i. 不使用索引

从字典中查“王”:从正文的第一页开始,逐页检查,看当前页中是否有“猪”这个字。要是没有再翻下一页。

ii. 使用索引

从字典中查“王”:先根据这个字的拼音或偏旁部首在“检字表”中找到这个字所在的页码,例如是857页,然后直接翻到857页,找到这个字。

全文检索技术:

Lucene和solr

索引库的结构:

索引库中的内容并不是一张完整的数据库表,因为有些内容在查询结果列表中不显示,所以不需要放在索引库中。

字段域的创建:

常用类型:

  1. IntField
  2. StringField
  3. TextField

分词的概念

把一句话/一篇文章拆分成一个一个单个的词,并在内部统计每个词出现的频率,以此为依据进行后续的查询搜索。

Good morning lily

[good]

[morning]

[lily]

我爱炒鸡蛋

[我]       [我]

[爱]       [爱]

[炒]       [炒鸡蛋]

[鸡蛋]

不分词的例子:“地址”字段中的“深圳”数据就不需要分词。不分词的字符串类型就使用StringField,分词的字符串就使用TextField。

建立索引

在索引库内部,将一个具体的索引值和文档中分词的结果关联起来,在搜索时使用索引可以快速定位到对应的词,进而快速定位到词所在的文档。

只有需要和搜索关键词匹配的字段才需要建立索引。

需要建立索引的字段例子:根据“神话”这个关键词搜索“song_name”字段中“神话”这条记录。

不需要建立索引的字段的例子:图片的路径/aaa/bbb/ccc/pic10.png所在的picture_path字段不需要建立索引。

字段的相关属性

  1. 数据类型:int、double、字符串等等

  2. 是否分词

    1. 要分词:包含很多词的一句话
    2. 不分词:分词之后失去本来的含义
  3. 是否建立索引

    1. 要建立索引:用户会根据关键词搜索这个字段
    2. 不建立索引:用户不会根据关键词搜索这个字段
  4. 是否存储

    1. 要存储:在查询结果列表中要显示,或会用到

    2. 不存储:在查询结果列表中不显示也不会用到

全文检索 -- Solr从概念到实战(一)的更多相关文章

  1. 转:手把手教你如何玩转Solr(包含项目实战)

    原文地址:手把手教你如何玩转Solr(包含项目实战) 参考原文

  2. MongoDB入门必读(概念与实战并重)

    MongoDB入门必读(概念与实战并重) 一.概述 MongoDB是一个基于分布式文件存储的数据库开源项目.由C++语言编写.旨在为WEB应用提供可护展的高性能数据存储解决方案. MongoDB是一个 ...

  3. 全文检索引擎Solr系列——Solr核心概念、配置文件

    Document Document是Solr索引(动词,indexing)和搜索的最基本单元,它类似于关系数据库表中的一条记录,可以包含一个或多个字段(Field),每个字段包含一个name和文本值. ...

  4. mongoDB入门必读(概念与实战并重)

    一.概述 MongoDB是一个基于分布式文件存储的数据库开源项目.由C++语言编写.旨在为WEB应用提供可护展的高性能数据存储解决方案. MongoDB是一个介于关系数据库和非关系数据库之间的产品,是 ...

  5. requireJS 从概念到实战

    requireJS 可以很轻易的将一个项目中的JavaScript代码分割成若干个模块(module).并且requireJS推荐一个模块就是一个文件,所以,你将获得一些零碎的具有互相依赖关系的JS文 ...

  6. 全文检索(SOLR)前端应用浅析 (转)

    最近在一个关于知识管理系统中检索的一个功能方案,找到了一个很好的参考应用方案嘎要的分析一下,希望有类似应用的可以交流交流. 提起全文检索,Lucene的大名估计地球人都知道,通过这么多年的发展,外围的 ...

  7. 全文检索~solr的使用

    全文检索这个系列在几前年写过lucene的文章,而现在看来它确实已经老了,它的儿子孙子都出来了,已经成为现在检索行列的主流,像solr,elasticsearch等,今天我们主要来看一个solr在as ...

  8. Hybrid App从概念到实战

    最近一直在准备找工作,看了很多公司的招聘介绍,有相当一部分直接写:熟悉 Hybrid App 开发加分!正好,我司开发的就有这种 Hybrid App--使用WebViewJavascriptBrid ...

  9. solr课程学习系列-solr的概念与结构(1)

    Solr是基于Lucene的采用Java5开发的一个高性能全文搜索服务器.源于lucene,却更比Lucene更为丰富更为强大的查询语言.同时实现了可配置.可扩展并对查询性能进行了优化,并且提供了一个 ...

随机推荐

  1. C#复习笔记(4)--C#3:革新写代码的方式(Lambda表达式和表达式树)

    Lambda表达式和表达式树 先放一张委托转换的进化图 看一看到lambda简化了委托的使用. lambda可以隐式的转换成委托或者表达式树.转换成委托的话如下面的代码: Func<string ...

  2. Oracle 同义词(Synonym)

    同义词(Synonym)是表.索引.视图等模式对象的一个别名.通过模式对象创建同义词,可以隐藏对象的实际名称和所有者信息,隐藏分布式数据库中远程对象的设置信息,由此为对象提提供一定的安全性保证.同义词 ...

  3. LLVM的安装

    1. 官网下载 llvm 2. 官网下载cmake 3. configure 执行 llvm 发现报错 4. 解压缩 cmake 5.将cmake 下面的bin 目录放到环境变量里面去 6. 创建一个 ...

  4. Oracle分析函数row_number()等的使用实例

    --分析函数 --rank() over(order by) --值相同,排名相同,序号跳跃 select * from t_account select rank() over(order by u ...

  5. vue页面是否缓存的两种方式

    第一种 <keep-alive> <router-view v-if="$route.meta.keepAlive"></router-view> ...

  6. C# Note22: 《Effective C#》笔记

    参考:<Effective C#>快速笔记(一)- C# 语言习惯 参考:<Effective C#>快速笔记(二)- .NET 资源托管 参考:<Effective C ...

  7. hadoop第一个例子

    Java.io.URL 1.编写java程序 package com.company; import java.io.IOException; import java.io.InputStream; ...

  8. class面向对象-2

    hasattr/getattr/setattr/delattr #通过字符串判断/获取/新增/删除对象属性或方法 class att(object): def __init__(self,var): ...

  9. 在linux命令下访问url

    1.elinks - lynx-like替代角色模式WWW的浏览器 例如: elinks --dump http://www.baidu.com 2.wget 这个会将访问的首页下载到本地 [root ...

  10. LODOP打印控件如何提示用户升级下载安装新版本

    Lodop.C-Lodop在不断完善功能和更新中,新版本修复了很多问题,以及增加很多有利的功能,网站如何更新版本,提示用户下载新版本呢?更新版本很简单,只需要三步:1.替换提示安装部分的自己放置的路径 ...