模糊查询、短语前缀、优化
一、模糊查询
1、四种情况:
混淆字符(box->fox) 缺少字符(black->lack)
多出字符(sic->sick) 颠倒次序(act->cat)
2、使用fuzzy进行模糊查询:
1 GET product_en/_search 2 { 3 "query": { 4 "fuzzy": { 5 "desc": { 6 "value": "quangongneng nfc" 7 } 8 } 9 } 10 }
3、使用match进行模糊查询
1 GET product_en/_search 2 { 3 "query": { 4 "match": { 5 "desc": { 6 "query": "nfe quasdasdasdasd", 7 "fuzziness": 1 8 } 9 } 10 } 11 }
使用fuzzy进行模糊查询与使用fuzzy进行模糊查询的区别:
使用fuzzy进行模糊查询时,value中的字段不会进行分词,而是作为一个整体进行匹配
使用match进行模糊查询时,value中的字段会被分词,分词后按照每个分词结果进行匹配
二、match_phrase_prefix
1、match_phrase:
①match_phrase会被分词
②被检索字段必须包含match_phrase中的所有词项并且顺序必须是相同的
③被检索字段包含的match_phrase中的词项之间不能有其他词项
2、match_phrase_prefix:它允许在文本的最后一个词项上的前缀匹配,如果是一个单词,比如a,它会匹配文档字段所有以a开头的文档,如果是一个短语,比如"this is ma",他会先在倒排索引中做以ma做前缀搜索,然后在匹配到的doc中做match_phrase查询
1 GET product_en/_search 2 { 3 "query": { 4 "match_phrase_prefix": { 5 "desc": { 6 "query": "de zhong shouji hongzhaji", 7 "max_expansions": 50 只使用前缀查询匹配50条数据 8 } 9 } 10 } 11 }
三、ngram和edge ngram
1 # ngram 和 edge-ngram 2 #ngram min_gram =1 "max_gram": 2 3 4 GET _analyze 5 { 6 "tokenizer": "ik_max_word", 7 "filter": [ "edge_ngram" ], 8 "text": "reba always loves me" 9 } 10 11 #min_gram =1 "max_gram": 1 12 #r a l m 13 14 #min_gram =1 "max_gram": 2 15 #r a l m 16 #re al lo me 17 18 #min_gram =2 "max_gram": 3 19 #re al lo me 20 #reb alw lov me
ngram适用于前缀、中缀、后缀搜索,因为它会将每个词项从头到尾按照min_gram和max_gram进行切分
edge_ngram只适用于前缀搜索,因为它只会将每个词项从头按照min_gram和max_gram进行切分,一旦到达max_gram后则跳到下一词项
作者:http://cnblogs.com/lyc-code/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权力。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~