• ElasticSearch 搜索推荐


    Term Suggester

    "suggest_mode":"missing"  missing 默认选项,不返回精准匹配到的分词结果
    "suggest_mode":"popular"  popular 大于等于搜索词频率的返回
    "suggest_mode":"always", 不做任何限制
     "min_doc_freq":2		出现在文档中的次数大于min_doc_freq的才返回,同一文档中多次出现算一次。
     GET /product/_search
    {
      "suggest": {
        "desc_suggest": {
          "text":"手机中的",
          "term":{
            "field":"desc",
            "suggest_mode":"popular",
            "min_doc_freq":2
          }
        }
      }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    Completion Suggester

    基于内存而非索引(内存消耗大),性能好,只适合前缀搜索
    结果精准度高召回率低
    
    #添加新字段 设置suggest
    PUT /product/_mapping
    {
      "properties": {
        "desc_sugg": {
          "type": "text",
          "analyzer": "ik_max_word",
          "fields": {
            "suggest": {
              "type": "completion",
              "analyzer": "ik_max_word"
            }
          }
        }
      }
    }
    
    #给新字段赋值
    POST /product/_update_by_query
    {
      "script": {
        "source": "ctx._source.desc_sugg=ctx._source.desc",
        "lang": "painless"
      },
      "query": {
        "match_all": {}
      }
    }
    # "skip_duplicates":true, 结果去重  
    # "fuzziness":2 允许容错数
    GET /product/_search
    {
      "suggest": {
        "desc_suggest": {
          "prefix": "耳机",
          "completion": {
            "field": "desc_sugg.suggest",
            "skip_duplicates":true,
            "fuzzy":{
              "fuzziness":2
            }
          }
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48

    Context Suggester

    新增索引
    PUT product_suggest
    {
      "mappings": {
        "properties": {
          "suggest": {
            "type": "completion",
            "contexts": [
              {
                "name": "place_type",
                "type": "category",
                "path": "tags"
              },
              {
                "name": "localtion",
                "type": "geo",
                "path": "loc",
                "precision": 4
              }
            ]
          },
          "loc":{
            "type": "geo_point"
          }
        }
      }
    }
    新增数据
    PUT /product_suggest/_doc/1
    {
      "suggest":["hello","word","tremhhh"],
      "tags":["no","hh"]
    }
    
    PUT /product_suggest/_doc/2
    {
      "suggest":["hellhho","word","treeemhhh"],
      "tags":["monely"]
    }
    
    PUT /product_suggest/_doc/3
    {
      "suggest": [
        "latlon",
        "word",
        "tremhhh"
      ],
      "loc": [
        {
          "lat": 43.56,
          "lon": -79.56
        },
        {
          "lat": 49.56,
          "lon": -59.56
        }
      ]
    }
    # "place_type":["no"] 在传入的指定分类中查询
    # {"context":"monely","boost":2}  boost增加权重返回结果会排在前面
    POST /product_suggest/_search
    {
      "suggest": {
        "tag_suggest": {
          "prefix": "he",
          "completion": {
            "field": "suggest",
            "size":10,
            "skip_duplicates":true,
            "contexts":{
              "place_type":[
                {"context":"no"},
                {"context":"monely","boost":2}
                ]
            }
          }
        }
      }
    }
    #地理位置查询
    POST /product_suggest/_search
    {
      "suggest": {
        "tag_suggest": {
          "prefix": "tre",
          "completion": {
            "field": "suggest",
            "size": 10,
            "skip_duplicates": true,
            "contexts": {
              "localtion": [
                {
                  "lat": 43.55,
                  "lon": -79.55
                }
              ]
            }
          }
        }
      }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
  • 相关阅读:
    《Vue.js实战》8.1自定义指令答案
    嵌入式Linux裸机开发(一)基础介绍及汇编LED驱动
    【MySQL技术专题】「索引技术」体验前所未有的技术探险,看穿索引的本质和技术体系(1)
    真福利!阿里师兄抄送的内部并发编程核心知识手册
    FL Studio20.9.1水果中文版来啦 Win/Mac中文版FL水果萝卜
    js/axios/umi-request 根据后端返回的二进制流下载文件
    【Docker 基础教程】侃侃而谈Docker镜像
    Netty+WebSocket整合STOMP协议
    Vue之ElementUI实现CUD(增删改)及表单验证
    对不起了,QQ和微信,我选择用它!
  • 原文地址:https://blog.csdn.net/pys52055/article/details/136596192