Lucene查询语法

Lucene查询语法

  • 版本:8.7

  • 文档地址

  • 通过JavaCC生成的查询分析器

  • 提供了原生通过API生成查询的方式和通过解析查询字符串生成查询的方式

  • 不要用代码生成查询字符串,然后通过查询分析器来分析

Terms-词语

  • 一个查询语句被切分为词语和操作符。词语分为两类:单个词和短语
  • 单个词:test、hello
  • 短语:被双引号围绕的一组词,如:"hello dolly"
  • 多个词可以通过Boolean操作符组合成一个更复杂的查询

Fields-字段

  • Lucene中数据都是封装到字段里面的,执行查询的时候,可以指定查询的字段,或者查询默认字段
  • 用冒号分割字段和查询的词,比如存在两个字段,title和text,text是默认字段。 text可以省略
    • title:"The Right Way" AND text:go = title:"The Right Way" AND go
    • title:The Right Way = title:The AND text:Right AND text:Way

Term Modifiers-词语修饰符

  • Lucene 支持提供查询选项修饰查询词语

Wildcard Searches-通配符查询

  • 单个字符?
  • 多个字符*
  • 短语不支持通配符
  • 通配符不能用在首字符

Regular Expression Searches-正则表达式查询

  • 正则写在正斜杠中间,如:/[mb]oat/
  • 正则支持的语法
  • 注意修改对应【正则支持的语法】链接的版本

Fuzzy Searches-模糊查询

  • 使用符号写在词语最后,如roam,能查询foam或者roams
  • 支持参数指定允许的最大编辑数,值在0-2之间,如roam~1
  • 没有参数默认是2
  • 之前版本小数也支持,5.0会移除

Proximity Searches-临近查询

  • Lucene支持在特定距离内查找单词。要进行邻近查询,在短语末尾使用波浪号“~”符号。
  • 要在文档中搜索10个单词以内的“apache”和“jakarta”,"jakarta apache"~10

Range Searches-范围查询

  • 语法:字段:[startValue TO endValue]

  • mod_date:[20020101 TO 20030101]

  • 不仅只能用在日期字段

  • 方括号包含,大括号不包含

Boosting a Term-增加相关度

  • 使用 ^
  • 比如词语 jakarta^4 apache
  • 比如短语 "jakarta apache"^4 "Apache Lucene"
  • 相关度默认1,不能为负,可以为小数jakarta apache^0.2

Boolean Operators-布尔操作符

  • 操作符必须全大写
  • 支持操作符
    • OR,||
    • AND,&&
    • "+",
    • NOT "-"

OR

  • 匹配其中一个

  • 默认的连接操作符

  • a b = a OR b = a || b

AND

  • 必须都匹配
  • a b = a AND b = a && b

+

  • +jakarta lucene
  • 必须匹配jakarta,可能匹配lucene

NOT -

  • "jakarta apache" NOT "Apache Lucene"
  • 包含前者,不包含后者
  • 不能单用,不然查不到

Grouping-分组

  • 使用小括号
  • (jakarta OR apache) AND website

Field Grouping-字段分组

  • 使用小括号
  • title:(+return +"pink panther")

Escaping Special Characters-转移特殊字符

  • 特殊字符:+ - && || ! ( ) { } [ ] ^ " ~ * ? : \ /
  • 使用后斜杠\转义
posted @ 2020-12-31 18:52  java拌饭  阅读(711)  评论(0编辑  收藏  举报