Solr怎么建立索引和查询-建立索引和查询过程

Solr怎么建立索引和查询


  Solr有非常多的功能,但是所有搜索引擎都没法脱离索引和查询,Solr全文检索也是类似的原理,它可以归结为两个过程: 1.索引创建(Indexing) 2. 搜索索引(Search)。因此下面将会对这两个部分展开讲解。

Solr建立索引的过程

  前面文章提到过,Solr/Lucene采用的是一种反向索引,所谓反向索引:就是从关键字到文档的映射过程,保存这种映射这种信息的索引称为反向索引。
在这里插入图片描述
  左边保存的是字符串序列

  右边是字符串的文档(Document)编号链表,称为倒排表(Posting List)

索引创建

假设有如下两个原始文档:
文档一:

Students should be allowed to go out with their friends, but not allowed to drink
beer.

文档二:

My friend Jerry went to school to see his students but found them drunk which is not allowed.
创建过程大概分为如下步骤:
在这里插入图片描述

  • 1.把原始文档交给分词组件(Tokenizer)

  分词组件(Tokenizer)会做以下几件事情(这个过程称为:Tokenize),处理得到的结果是词汇单元(Token)

​ a.将文档分成一个一个单独的单词

​ b.去除标点符号

​ c.去除停词(stop word)

  所谓停词(Stop word)就是一种语言中没有具体含义,因而大多数情况不会作为搜索的关键词,这样一来创建索引时能减少索引的大小。经过分词(Tokenizer)后得到的结果称为词汇单元(Token)。

  上例子中,便得到以下词汇单元(Token):“Students”,“allowed”,“go”,“their”,“friends”,“allowed”…….等等

  • 2.词汇单元(Token)传给语言处理组件(Linguistic Processor)

语言处理组件(linguistic processor)主要是对得到的词元(Token)做一些语言相关的处理。对于英语,语言处理组件(Linguistic Processor)一般做以下几点:

   a.变为小写(Lowercase)。

  b.将单词缩减为词根形式,如”cars”到”car”等。

  c.将单词转变为词根形式,如”drove”到”drive”等。

  d.语言处理组件(linguistic processor)处理得到的结果称为词(Term)

  例子中经过语言处理后得到的词(Term)如下: “student”,“allow”,“go”,“their”,“friend”,“allow”,……等等

  • 3.得到的词(Term)传递给索引组件(Indexer)

a.利用得到的词(Term)创建一个字典
在这里插入图片描述

b.对字典按字母顺序排序:Term Document ID

在这里插入图片描述
c.合并相同的词(Term)成为文档倒排(Posting List)链表
在这里插入图片描述

  至此索引创建完成,搜索”drive”时,”driving”,”drove”,”driven”也能够被搜到。因为在索引中,”driving”,”drove”,”driven”都会经过语言处理而变成”drive”,在搜索时,如果您输入”driving”,输入的查询语句同样经过分词组件和语言处理组件处理的步骤,变为查询”drive”,从而可以搜索到想要的文档。

Solr搜索的工作流程

在这里插入图片描述
用户输入查询字符串,根据用户的请求类型qt(查询为/select)选择请求处理器RequestHandler,根据用户输入的参数defType来选择一个查询解析器解析用户的查询串(默认使用RequestHander中配置的默认查询解析器),查询解析器解析完以后根据用户输入的参数qf指定的字段进行搜索(默认是所有索引字段),查询到结果以后做一些特殊的处理(fq,sort,start,rows,wt)以后使用响应处理器ResponseWriter返回给用户。

Solr的查询

  Solr的查询,首先会对查询条件进行词法分析、语法分析、语言处理,然后通过分析后的词到索引中查询,然后得到存在指定词的文档集合,然后再进行对结果的一些处理,例如排序或者查找指定的条目数的文档等。主要步骤:

  第一步.对查询内容进行词法分析、语法分析、语言处理,最主要的处理

  第二步.搜索索引,得到符合语法树的文档集合

  第三步.根据查询语句与文档的相关性,对结果进行排序

对查询内容进行词法分析

区分查询内容中单词和关键字,比如:Apple and Phone, ” and”就是关键字,” Apple ”和”Phone”是普通单词。根据查询语法的语法规则形成一棵树
在这里插入图片描述

语言处理

跟创建索引时处理方式是一样的。比如:learned–>learn,driven–>drive

搜索索引得到结果,进行排序

第二步,搜索索引,得到符合语法树的文档集合
第三步,针对符合条件的文档结果,根据查询语句与文档的相关性,对结果进行排序,分数高比较越相关,排名就越靠前。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值