模糊查询和智能搜索推荐2.0
一、前缀搜索
prefix前缀搜索的不是数据库中映射的文本,而是词项字典中的数据
前缀搜索不会计算相关度分数
1 GET my_index/_search 2 { 3 "query": { 4 "prefix": { 5 "text": { 6 "value": "城管" 7 } 8 } 9 } 10 }
注意:当mapping中字段没有设置分词器时,中文会被默认按照空格进行分词
在进行搜索时尽量不要使用prefix,性能不好
二、通配符wildcard
1 GET my_index/_search 2 { 3 "query": { 4 "wildcard": { 5 "text": { 6 "value": "eng*ish" 7 } 8 } 9 } 10 }
注意:通配符与前缀搜索相同,都为term查询,及搜索的为词项字典中匹配的text
三、正则表达式
1 { 2 "query": { 3 "regexp": { 4 "title": { 5 "value": "[\\s\\S]*nfc[\\s\\S]*" 6 } 7 } 8 } 9 }
一般查询时很少使用正则表达式进行查询
四、模糊查询
1、使用场景:
混淆字符(box -> fox) 缺少字符(black -> lack)
多出字符(sic -> sick) 颠倒字符(act -> cat)
2、语法
1 { 2 "query": { 3 "fuzzy": { 4 "desc": { 5 "value": "[\\s\\S]*nfc[\\s\\S]*" 6 } 7 } 8 } 9 }
五、短语前缀 match_phrase_prefix
1、match_phrase:短语搜索
①会被分词 ②被检索字段必须包含match_phrase中的所有词项且顺序相同
例:match_phrase:手机 中 被检索:手机 中 的 轰炸机
被检索中必须包含(手机 中),且顺序不能变
2、match_phrase_prefix:短语最后一个词项做前缀查询
例:match_phrase_prefix:shouji zhong d 被检索:shouji zhong de zhandouji
此时match_phrase_prefix也可以搜索到结果,因为最后的d会做前缀匹配
执行原理:先将match_phrase_prefix最后一个词项做前缀查询(特别消耗性能),再将匹配到的所有词项做短语查询
可以设置max_expansions参数,默认为50,及前缀匹配中搜索前50的词项
作者:http://cnblogs.com/lyc-code/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权力。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ThreeJs-16智慧城市项目(重磅以及未来发展ai)
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
· Ai满嘴顺口溜,想考研?浪费我几个小时
· Browser-use 详细介绍&使用文档
· 软件产品开发中常见的10个问题及处理方法
2020-09-12 ES环境安装、健康值检查及CRUD