Lucene语法详解(6大查询语法使用示例)

Lucene语法详解(6大查询语法使用示例)-mikechen

单词查询

Term术语表示文本中的单词,这是搜索单位。

Term由两个元素组成:一个字符串形式的单词文本,另一个文本所在字段的名称。

比如:

Query query = new TermQuery(new Term("title", "mike"));

Terrms分为两种,单词查询和词组查询。

比如:

Query query = new TermQuery(new Term("title", "mike chen"));

上面的:”mike chen “就是一个词组,词组查询时需要用将词组包括进来,不然会被拆分成两个单词进行查询。

 

通配符查询

可将通常可识别的语法用于多个 (*) 或单个 (?) 字符通配符搜索。

比如:

POST /indexes/hotel-samples-index/docs/search?api-version=2020-06-30
{
    "search": "HotelName:sc*",
    "queryType": "full",
    "select": "HotelName",
    "count": true
}

上面就是HotelName:sc* ,* 匹配sc开头的0个或多个字符。

 

模糊查询

模糊查询,Lucene的模糊查询不同于sql,他是找出与给定条件相近的结果来。

示例:

GET /blogs_index/_search
{
    "query": {
        "fuzzy" : {
            "author": {
                "value": "方财兄",
                "fuzziness": 1,
                "prefix_length": 1,
                "max_expansions": 100
            }
        }
    }
}

上面输入的是”方财兄“,实际模糊查询匹配,也会去匹配“方才兄”。

范围查询

{}尖括号表示不包含最小值和最大值,可以单独使用。

[]方括号表示包含最小值和最大值,可以单独使用。

比如:

name:{A,C}

搜索名字在A和C之间的, 返回:bone、baby、barry等等。

搜索第2到第8页,包含两端点:

page: [2 TO 8]

 

Lucene语法详解(6大查询语法使用示例)-mikechen

 

优先级查询

如果单词的匹配度很高,一个文档中,或者一个字段中可以匹配多次,那么可以提升该词的相关度

使用:

使用符号^提高相关度

如下图所示:
Lucene语法详解(6大查询语法使用示例)-mikechen

 

逻辑操作

支持多种操作符: AND OR NOT AND: 连接两个搜索条件。

1.搜索同时包含tom和john的文档

tom AND john 或者 tom && john

 

2.搜索包含tom或者john的文档

tom OR john 或者 tom || john

 

3.搜索包含tom,不包含john的文档

tom NOT john 或者 tom && !john

 

4.搜索包含tom的文档

 tom

 

5.搜索不包含tom的文档

-tom

 

作者简介

陈睿|mikechen,10年+大厂架构经验,BAT资深面试官,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

👇阅读更多mikechen架构文章👇

阿里架构 |双11秒杀 |分布式架构 |负载均衡 |单点登录 |微服务 |云原生 |高并发 |架构师

以上

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法