小言_互联网的博客

熟悉lucene

364人阅读  评论(0)

 (1) lucene的总体架构

  • 文档(Document):索引与搜索的主要载体,它包含一个或多个字段
  • 字段(Field):文档的一个片段,它包含两部分,字段的名称与内容
  • 词项(term):搜索时的一个单位,代表文本中的某个词
  • 词条(token):词项在字段中的一次出现,包含词项的文本,开始和结束的位移以及类型

ApacheLucene将写入索引的所有信息组织成一种名为倒排索引的结构,该结构是一种将词项映射到文档的数据结构。

(2)分析你的数据

文本分析是由分析器来执行,而分析器是由分词器(tokenizer),过滤器(filter)和字符映射器组成(characterMapper)

  • 分词器用来将文本切割成词条,其中携带各种额外信息的词项,这些信息包括:词项在原始文本中的位置,词项的长度。分词器的工作成果称为词条流,因为这些词条被一个接一个地推送给过滤器处理
  • 过滤器数额可选,可以为0-多个,用于处理词条流中的词条。例如:他可以移除,修改词条流中的词条,甚至可以创造新的词条。lucene提供了很多现成的过滤器,你也可以根据需要实现一个新的过滤器。
  • 字符映射器用于调用分词器之前的文本预处理操作,如HTML文本的去标签处理

(3)Lucene查询语言

在Lucene中,一个查询通常被分割为词项与操作符。Lucene中的词项可以是单个词,也可以是一个短语(用双引号括起来的一组词)。如果设置了查询分析过程,那么预先选定的分析器将会对查询中的所有词项进行处理

查询中也可以包含布尔操作符,用于连接多个词项

  • and:文档匹配当前从句当且仅当and操作符左右两边的词项都在文档中出现。
  • or:包含当前从句中任意词项的文档都会被视为该从句匹配。
  • not:与当前从句匹配的文档必须不包含not操作符后面的词项。
  • +:只有包含+操作符后面词项的文档才会被认为是与从句匹配
  • -:与从句匹配的文档不能出现-操作符后的词项

如果查询中没有出现前面提到的任意操作符,那么默认使用or操作符

还可以使用圆括号对从句进行分组,以构造更复杂的从句

eg:查找所有在title字段中同时包含词项elasticsearch和短语masting的文档

title:(+elasticsearch +"masetring")

词项修饰符

Lucene允许用户使用修饰符修改传入查询对象的词项,最常见的修饰符就是通配符,Lucene支持两种通配符:?和*

  • ? 匹配单个字符
  • * 匹配任意字符

出于对性能的考虑,通配符不能作为词项的第一个字符出现

 

除通配符之外,Lucene还支持模糊查询,通过使用~字符以及一个紧随其后的整数值。当使用该修饰符修饰一个词项时,意味着我们想搜索那些包含该词项近似词项的文档,~字符后的整数值确定了近似词项与原始词项的最大编辑距离,eg:当我们只想查询writer~2,意味着包含词项writer和writers的文档都能与查询匹配

 

范围查询

price: [ 10.00 To 15.00 ]

上述查询所返回文档的price字段的值 10<= price <= 15.00

price: [ 10.00 To 15.00 }

上述查询所返回文档的price字段的值 10<= price < 15.00

 

转义 

如果想搜索 abc“efg 

abc\"efg


转载:https://blog.csdn.net/weixin_42195284/article/details/100856397
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场