如何使用elasticsearch获得最重要的复合搜索词?

时间:2019-04-22 07:19:59

标签: python elasticsearch

我需要从elasticsearch获得搜索量最高的术语。我们使用的是Elasticsearch提供的重要术语功能,但是此功能只能获取热门的单个单词搜索词。相反,我们需要对最上面的多词进行搜索。

elasticsearch中目前有这样做的方法吗?

以下是我们正在使用的相关查询:

GET /mentions/_search
{
    "size": 0, 
    "query": {
        "match": {
            "snippet": {
                "query": "#Hashtag"
            }
        }
    },
   "aggs": {
        "trends": {
          "significant_terms": {
            "field": "snippet",
            "size": 1000
          }
        }
      }
}

2 个答案:

答案 0 :(得分:1)

常用短语问题没有“魔术”解决方案,

不过,解决该问题的最佳方法是使用N-grams概念。

基本上,而不是为单个单词建立文本索引(因为热门词汇聚合搜索仅限于索引词),可以创建一个新的分析器,该分析器可以为您量身定制,如果您有具体的用法,或者使用Common gram token filter,因为Elasticsearch开发人员很聪明(大概是这样),我认为这可能对您非常有用,并且他们的解决方案可能比您或我想出的Hastley效率更高。

请注意,我不确定您的规模如何,但是此解决方案将占用大量磁盘空间,并且可能会影响其他查询效率。

答案 1 :(得分:0)

我同意Tom的回答,因为没有适用于所有用例的解决方案。 Elasticsearch没有关于如何对搜索到的术语进行排序以便为您提供最重要的术语列表的概念。

例如,如果您要在您的Elasticsearch实例中存储推文,则最喜欢的搜索词是最热门的搜索词吗?转推次数最多?您是否结合使用了这两个指标以及最近发布了该推文?那真的取决于您的用例。

您可以按频率获得热门搜索字词,但也许您会包含诸如'and'或'the'之类的用词,它们并不是很有用。为了避免这种情况,您必须考虑在存储搜索短语时而不是在检索时删除停用词(请参见:elasticsearch stopwords)。 Elasticsearch提供了一系列开箱即用的语言分析器,可提高对文档集的搜索性能(请参阅:using elasticsearch language analyzers)。