• 模糊查询和智能搜索推荐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/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权力。

  • 相关阅读:
    驾照更换说明
    批处理创建快捷方式
    AC中保存数据与查询数据
    logger日志模块
    如何将python脚本转化为exe
    numpy学习
    request是个什么东西
    django的test文件的使用方式
    高频正则表达式
    dir 的作用
  • 原文地址:https://www.cnblogs.com/lyc-code/p/15257776.html
Copyright © 2020-2023  润新知