首页 > 解决方案 > 弹性搜索 - shingle 令牌过滤器的替代选项

问题描述

我想实现自动建议功能,就像谷歌搜索一样。Shingle Token Filter 最适合我的要求。让我解释一下我的索引详细信息。

  1. 索引大小为 16gb - 2000 万份文档。每个文档的平均大小为 0.53 kb。

  2. 瓦过滤器应用于 WorkDescripton 字段。WorkDescripton 字段的平均大小为 0.45kb。

  3. 在分析器下方,索引创建时使用的过滤器和映射

    一个。筛选

     "shingle-filter" : {
           "max_shingle_size" : "3",
           "min_shingle_size" : "2",
           "output_unigrams" : "false",
           "type" : "shingle"
         }   
    

    湾。分析仪-

      "ana_autocomplete" : {
           "filter" : [
             "lowercase",
             "shingle-filter"
           ],
           "tokenizer" : "standard"
         }
    

    C。与工作描述字段的映射是

      "workDesc" : 
      {
         "type" : "text",
         "fields" : 
         {
            "suggestions" : 
            {
               "type" : "text",
               "analyzer" : "ana_autocomplete",
               "fielddata" : true,
               "fielddata_frequency_filter" : 
                {
                  "min" : 0.001,
                  "max" : 0.1,
                  "min_segment_size" : 500
                }
             },
             "workDesc" : 
             {
               "type" : "text",
               "analyzer" : "ana_tenderinfo"
             }
         }
     }
    
  4. 我使用聚合查询来获取结果

     GET tenderinfo_version_9/_search
     {
        "aggs":
        {
            "workDesc_111":
            {
               "terms":
               {
                  "field":"workDesc.suggestions",
                   "include":"civil.*",
                  "order":[
                  {
                     "_count":"desc"
                  }],
                  "size":10
               }
            }
        }
        ,"size":0,
        "_source":false
    }
    
  5. 当文档为 10 万时,自动完成功能就像魅力(结果以毫秒为单位)一样工作,但是当文档为 2000 万时,我得到了超时错误。

  6. 弹性搜索服务器配置是

    操作系统 - Ubantu 18.04.6 LTS

    CPU - Intel(R) Core(TM) i5-7400 CPU @ 3.00 GHz。1个物理处理器,4核,4线程

    内存 - 16GB

有没有其他选择可以得到相同的结果?请指教

标签: elasticsearchkibanaelastic-stack

解决方案


推荐阅读