模糊查询和智能搜索推荐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的词项

 

posted @   showMeTheCodes  阅读(114)  评论(0编辑  收藏  举报
编辑推荐:
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
阅读排行:
· ThreeJs-16智慧城市项目(重磅以及未来发展ai)
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
· Ai满嘴顺口溜,想考研?浪费我几个小时
· Browser-use 详细介绍&使用文档
· 软件产品开发中常见的10个问题及处理方法
历史上的今天:
2020-09-12 ES环境安装、健康值检查及CRUD
点击右上角即可分享
微信分享提示