【问题标题】:Elasticsearch Auto complete using ngramElasticsearch 使用 ngram 自动完成
【发布时间】:2018-03-05 15:23:03
【问题描述】:

我是 Elasticsearch 的新手,我有一个关于使用 NGram 实现自动完成功能的问题。从互联网上,我了解到与使用内置完成建议器相比,NGram 实现允许灵活的解决方案,例如从中间匹配、突出显示等。

因此,我的一种索引类型具有以下字段映射:

"suggest_keywords": {
    "type": "string",
    "analyzer": "nGram_analyzer",
    "search_analyzer": "whitespace_analyzer"
},

nGram 分析器配置:

"nGram_analyzer": {
    "filter": [
        "lowercase",
        "asciifolding",
        "nGram_filter"
        ],
    "type": "custom",
    "tokenizer": "whitespace"
}

以下是我对于字段的示例数据。

"suggest_keywords": [
        "Wholesale",
        "Fish",
        "Seafood",
        "Fishmongers",
        "Markets"
],

当我使用以下查询时,它将返回整个数组。因为我只需要几个

{
    "query": {
        "match":{
            "suggest_keywords" : "food"
        }
   }
}

我尝试使用突出显示来提取单个术语,但突出显示的术语存在于搜索结果中的每个文档中。我尝试使用聚合,但未能编写将突出显示和聚合结合起来的查询。有可能吗?

{
   "query": {
      "match": {
         "suggest_keywords": "nge"
      }
   },
   "highlight": {
      "fields": {
         "suggest_keywords": {}
      }
   }
}

或者是否有更好的实现从 nGram 分析数组中进行搜索?还是应该将所有这些关键字索引到不同的类型中?

谢谢!

【问题讨论】:

    标签: elasticsearch n-gram elasticsearch-aggregation elasticsearch-analyzers


    【解决方案1】:

    您最好在单独的文档中索引数组的每个项目,这样您就可以只找到匹配的文档。

    而不是使用:

    POST /doctype
    {
        "suggest_keywords": [
            "Wholesale",
            "Fish",
            "Seafood",
            "Fishmongers",
            "Markets"
        ]
    }
    

    使用单独的文档并单独索引它们:

    doc1:

    POST /doctype
    {
       "suggest_keywords": "Wholesale"
    }
    

    doc2:

    POST /doctype
    {
       "suggest_keywords": "Fish"
    }
    

    等等……

    然后在搜索结果中,您将在单独的文档中获得匹配结果

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-14
      • 1970-01-01
      • 1970-01-01
      • 2016-04-09
      • 1970-01-01
      • 2020-07-14
      • 2017-09-11
      相关资源
      最近更新 更多