Lucene基本语法

来源:互联网 发布:三星s4支持3g网络吗 编辑:程序博客网 时间:2024/06/17 14:00

Terms(文本匹配)

terrms分为两种,单词查询和词组查询。单词如“hello”,词组如“hello world”。他们可以用布尔运算符连接起来构成复杂查询。

#查询包含hello的结果hello#查询包含“hello world”的结果"hello world"

注意,词组查询时需要用”“将词组包括进来,不然会被拆分成两个单词进行查询
“hello world”

Fields(字段匹配)

字段类型的查询。Lucene的内部结构类似json格式,采用key、value的形式存储。因此通过key/value查询是必要的。他的基本语法是key:value。

#查询订单号为20171001111023232353的结果order_no:"20171001111023232353"

注意,当value为多个单词时,需要用”“修饰

#查询标题为“Do it right”的文章title:"Do it right"

Wildcard Searches(通配符匹配)

Lucene支持强大的通配符查询。
使用?表示匹配单个字符,*表示匹配0个以上的字符。

#查询名字为“蒙奇.*.路飞”的人,找出其中的冒牌货name:"蒙奇.?.路飞"
#找出“蒙奇.D”家族的所有人name:"蒙奇.D.*"

Note:通配符不能用于查询的第一个字符

Fuzzy Searches(模糊匹配)

模糊查询,Lucene的模糊查询不同于sql,他是找出与给定条件相近的结果来。比如查询Hello相近的词组,他会返回fellow,Helloween等词汇,并根据相似度打分,相似度分数范围为(0-1)。

#与Hello相似度大于0.5的结果Hello~0.5

Proximity Searches(相邻匹配)

用于搜索两个相隔一定距离的两个词组。

#搜索"hello""Tom"之间隔着10个单词的结果"hello Tom"~10

Range Searches(范围匹配)

#返回id在10到100氛围内的所有结果,包含id为10和100的结果id:[10 TO 100]
#返回id在10到100氛围内的所有结果,不包含id为10和100的结果id:{10 TO 100}

Boosting a Term (提升权重)

在查询结果中,Lucene会为每个结果打分,打分规则是Lucene认为该结果与查询条件的关联度。关联度越高打分越高。默认情况下每个词语的权重都是1,但实际中,可能每个词语的权重并不一样。我们可以通过”^”来修改。

#搜索包含hello和world的结果,并且hello的权重为2hello^2 world

Boolean Operators (布尔操作符)

Lucene 支持 “AND”, “+”, “OR”, “NOT” 和 “-” ,注意,这些操作符必须是大写。

AND

AND连接的查询条件必须全部满足,可以用”&&”替换

#查询航司为CA,id为100的记录carrier:CA AND id:100

+

+连接的查询必须满足,其他条件可以不满足 查询姓”张”的名字中可能带有”华”的名字,+张 华

OR

OR是默认连接符,默认情况下,Lucene会将句子拆分成单词并用OR连接起来查询,表示或者

#查询"张"或者"华"的名字:张 华张 OR

NOT

NOT表示从满足左边条件结果中去除右边条件。可用”!”替换

#查询航司为CA并且不再2017-01-01起飞的航班carrier:CA NOT flightDate:2017-01-01

-

与NOT类似,表示从满足左边条件结果中去除右边条件

Grouping(分组)

Lucene支持使用()来自定义查询条件的组合,以实现查询逻辑的自由组合。

#查询名字为"张三"或者"李四",性别为男且年龄在2025之间的人(name:"张三" OR name:"李四") AND sex:man AND age:[20 TO 25]

Field Grouping(字段分组)

Lucene支持在字段匹配使用分组来组合搜索逻辑。

#查询年龄段为10到20和50到80的人群age:([10 TO 20] [50 TO 80])

注意:当需要搜索name包含”&”时,需要使用”/”做转义。比如name:/&, 类似的有+ - && || ! ( ) { } [ ] ^ ” ~ * ? : \