全文检索:

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

传统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. 批量处理word所有回车行

    在WORD中点击CTRL+H,弹出对话框,输入如下替换符

  2. centos6.8 安装wget

    1.执行yum -y install wget 提示:没有相应的包.原因:默认最小化安装没有装wget,而且默认源中没有wget,所以只能先切换源配置. (1)下载.阿里的源配置,并放到/etc/yu ...

  3. scrapy架构简介

    一.scrapy架构介绍 1.结构简图: 主要组成部分:Spider(产出request,处理response),Pipeline,Downloader,Scheduler,Scrapy Engine ...

  4. Slave_SQL_Running:No的两种解决办法

    进入slave服务器,运行: mysql> show slave status\G ....... Relay_Log_File: localhost-relay-bin. Relay_Log_ ...

  5. Java集合和数组的区别

    参考:Java集合和数组的区别 集合和容器都是Java中的容器. 区别 数组特点:大小固定,只能存储相同数据类型的数据 集合特点:大小可动态扩展,可以存储各种类型的数据   转换 数组转换为集合: A ...

  6. fiddler学习笔记2 字段说明;移动设备、解密证书

    # :           抓取顺序从1开始递增 result:    http 请求状态 protocol:   请求使用的协议如:http https ftp Host:         请求地址 ...

  7. vue起步和模板語法

    vue構造器里有哪些內容: var a=new Vue({}) 模板語法: 文本插值: html: html的屬性里的值應該使用v-bind: 表達式: 指令; 參數:v-bind,v-on 雙向用戶 ...

  8. PHP涉及到的英文单调

    slashes [slæʃeis]:斜线 uppercase ['ʌpəˌkeɪs]:大写字母,简写uc strip [strɪp]:去掉 trim [trɪm]:整理(修剪) explode [ɪk ...

  9. LODOP字体不识别 英文字母连起来 引号不正常

    打印超文本的时候,有时候会发现html中设置的css样式显示不正常,字体根本不是设置的字体,这种情况有可能是:1.该操作系统没有安装自己指定的那种字体,那么没有安装自然就不能显示设置的字体.2.该操作 ...

  10. 为WebRTC 应用部署Turn Server

    部署WebRTC 或 SIP p2p 方案时经常会遇到p2p 无法穿透的环境, 这时就是TunServer 的用武之地了. 这里我们使用turnserver-0.7.3 下载confuse依赖库 wg ...