我需要从 elasticsearch 中获取热门搜索词。我们正在使用 elasticsearch 提供的重要术语功能,但此功能只能获取热门单字搜索词。相反,我们需要顶部的多词搜索。目前有没有办法在弹性搜索中做到这一点?以下是我们正在使用的相关查询:GET /mentions/_search{ "size": 0, "query": { "match": { "snippet": { "query": "#Hashtag" } } }, "aggs": { "trends": { "significant_terms": { "field": "snippet", "size": 1000 } } }}
2 回答
慕的地8271018
TA贡献1796条经验 获得超4个赞
常用短语问题没有“神奇”的解决方案,
然而,处理这个问题的最佳方法,我觉得是使用N-gram概念。
基本上不是为单个单词索引您的文本(因为顶级术语聚合搜索仅限于索引术语)如果您对如何执行此操作有特定想法或使用通用克标记创建一个为您量身定制的新分析器我觉得过滤器对你很有用,因为弹性搜索开发人员很聪明(大概),他们的解决方案可能比你或我精心设计的更有效。
请注意,我不确定您的规模是多少,但此解决方案将使用更多磁盘空间并可能影响其他查询效率。
繁花不似锦
TA贡献1851条经验 获得超4个赞
我同意 Tom 的回答,因为没有适用于所有用例的解决方案。Elasticsearch 不知道如何对搜索词进行排序以便为您提供排名靠前的词的列表。
例如,如果您在 Elasticsearch 实例中存储推文,那么最热门的搜索词是最喜欢的词吗?转发最多?您是否使用这两个指标的组合以及最近发布推文的时间?这实际上取决于您的用例。
您可以按频率获得最热门的搜索词,但您可能会包含诸如“and”或“the”之类的词,这些词不是很有用。为了防止这种情况,您必须考虑在存储搜索短语时删除停用词,而不仅仅是在检索时(请参阅:elasticsearch stopwords)。Elasticsearch 提供了一组开箱即用的语言分析器,提高了文档语料库的搜索性能(请参阅:使用 elasticsearch 语言分析器)。
添加回答
举报
0/150
提交
取消