单词查询
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]
优先级查询
如果单词的匹配度很高,一个文档中,或者一个字段中可以匹配多次,那么可以提升该词的相关度
使用:
使用符号^提高相关度
如下图所示:
逻辑操作
支持多种操作符: 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年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》