• Elasticsearch suggester搜索建议初步


    环境

    • Elasticsearch 2.3.5
    • Elasticsearch-ik-plugin

    实现

    • 搜索建议的对象
      假设有以下两个json对象,需要对其中tags字段进行搜索建议:
    //对象Product1
    {
        "title": "Product1",
        "description": "Product1 Description",
        "tags": [
            "山东",
            "山东高新开发区",
            "山东大学",
            "two columns",
            "wordpress"
        ]
    }
    
    //对象Product2
    {
        "title": "Product2",
        "description": "Product2 Description",
        "tags": [
            "山东省",
            "山东公安局",
            "山东检察院",
            "skrill",
            "wordland"
        ]
    }
    
    • 设置索引mapping
      建立索引suggester_ik_test和mapping,如下:
      注意使用的suggester类型为completion
    curl -XPUT "http://10.110.13.57:9200/suggester_ik_test?pretty" -d'
        {
       "mappings": {
          "product": {
             "properties": {
                "description": {
                   "type": "string"
                },
                "tags": {
                   "type": "string"
                },
                "title": {
                   "type": "string"
                },
                "tag_suggest": {
                   "type": "completion",
                   "analyzer": "ik_max_word",
                   "search_analyzer": "ik_max_word",
                   "payloads": false
                }
             }
          }
       }
    }'
    
    • 索引数据
      根据上述索引和mapping对json数据建立索引:
    //Product1
    curl -XPUT "http://10.110.13.57:9200/suggester_ik_test/product/1?pretty" -d'
        {
       "title": "Product1",
       "description": "Product1 Description",
       "tags": [
             "山东",
             "山东高新开发区",
             "山东大学",
             "two columns",
             "wordpress"
       ],
       "tag_suggest": {
          "input": [
             "山东",
             "山东高新开发区",
             "山东大学",
             "two columns",
             "wordpress"
          ]
       }
    }'
    
    //Product2
    curl -XPUT "http://10.110.13.57:9200/suggester_ik_test/product/2?pretty" -d'
    {
        "title": "Product2",
        "description": "Product2 Description",
        "tags": [
            "山东省",
            "山东公安局",
            "山东检察院",
            "skrill",
            "wordland"
        ],
       "tag_suggest": {
          "input": [
            "山东省",
            "山东公安局",
            "山东检察院",
            "skrill",
            "wordland"
          ]
       }
    }'
    
    • 测试
      搜索“山东”,查看是否有搜索建议提示生效:
    curl -XPOST "http://10.110.13.57:9200/suggester_ik_test/_suggest?pretty" -d'
        {
        "product_suggest":{
            "text":"山东",
            "completion": {
                "field" : "tag_suggest"
            }
        }
    }'
    
    //应该得到以下数据
    {
      "_shards" : {
        "total" : 5,
        "successful" : 5,
        "failed" : 0
      },
      "product_suggest" : [ {
        "text" : "山东",
        "offset" : 0,
        "length" : 2,
        "options" : [ {
          "text" : "山东",
          "score" : 1.0
        }, {
          "text" : "山东公安局",
          "score" : 1.0
        }, {
          "text" : "山东大学",
          "score" : 1.0
        }, {
          "text" : "山东检察院",
          "score" : 1.0
        }, {
          "text" : "山东省",
          "score" : 1.0
        } ]
      } ]
    }
    

    参考资料

    Quick and Dirty Autocomplete with Elasticsearch Completion Suggest

  • 相关阅读:
    Discuz X3.2 分区 gid 完美伪静态方法 Apache/Nginx
    如何批量转换 WordPress 文章分类
    修改 WordPress 文件上传目录
    如何验证 jemalloc 优化 Nginx 是否生效
    .Net Core 1.1 + CentOs 7 环境配置
    DotNet Core中使用dapper
    爬虫 HttpHelper
    iTextSharp 不适用模板 代码拼接PDF
    .Net中的加密解密
    .Net Core使用 MiniProfiler 进行性能分析
  • 原文地址:https://www.cnblogs.com/myitroad/p/5789202.html
Copyright © 2020-2023  润新知