我需要从elasticsearch中获取最热门的搜索词。我们使用的是elasticsearch提供的重要词条功能,但该功能只能获取排名靠前的单字搜索词条。取而代之的是,我们需要对多个单词进行搜索。
目前有没有办法在elasticsearch中做到这一点?
以下是我们正在使用的相关查询:
GET /mentions/_search
{
"size": 0,
"query": {
"match": {
"snippet": {
"query": "#Hashtag"
}
}
},
"aggs": {
"trends": {
"significant_terms": {
"field": "snippet",
"size": 1000
}
}
}
}发布于 2019-04-27 03:54:24
常见短语问题没有“魔法”解决方案,
然而,我认为处理这个问题的最好方法是使用N-grams概念。
基本上,不是为你的文本建立单个单词的索引(因为顶级词汇聚合搜索仅限于索引词汇),要么创建一个新的分析器,如果你有具体的想法如何做的话,它是为你量身定做的;或者使用Common gram token filter创建一个分析器,我觉得这对你很有用,因为elasticsearch开发人员很聪明(大概),他们的解决方案可能比你我匆忙制定的更有效。
请注意,我不确定您的规模是多少,但此解决方案将使用更多的磁盘空间,并可能影响其他查询的效率。
发布于 2019-05-13 05:40:15
我同意Tom的回答,没有适用于所有用例的解决方案。Elasticsearch没有关于如何对搜索到的词条进行排序的概念,以便为您提供一个排名靠前的词条列表。
例如,如果你在Elasticsearch实例中存储Tweet,那么最热门的搜索词是不是点赞最多的?最多的转发?你是否使用了这两个指标的组合,以及这条推文是多久发布的?这真的取决于你的用例。
你可以通过频率来获得最热门的搜索词,但是你可能会包含像'and‘或者'the’这样不太有用的词。为了防止这种情况,你必须考虑在存储搜索短语时删除停用词,而不仅仅是在检索时(参见:elasticsearch stopwords)。Elasticsearch提供了一组开箱即用的语言分析器,提高了对文档语料库的搜索性能(参见:using elasticsearch language analyzers)。
https://stackoverflow.com/questions/55790633
复制相似问题