当前位置: 首页 > 知识库问答 >
问题:

Elasticsearch术语聚合排序

袁亦
2023-03-14

我们目前正在开发一个多语言文档CMS。因此,我们有翻译成不同语言的文件。

对于使用Elasticsearch进行搜索,我们目前使用每种语言(德语、英语、法语……)一个索引,其中同一文档的所有翻译共享相同的ID。

当用户搜索特定术语时,我们希望在所有语言中搜索,但只返回不同ID的列表。据我所知,只有使用以下术语聚合才能做到这一点:

curl localhost:9200/german,english,french/_search?pretty=1 -d 
'{
    "aggs": {
        "asset_ids": {
            "terms": {
                "field": "_id"
            }
        }
    }
}'

这很好,但是作为弹性搜索文档https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html#search-aggregations-bucket-terms-aggregations-order

状态,这将返回按每个桶的文档数排序的不同ID列表。

我的问题是:是否可以从多个索引中检索不同ID的列表,其中所述ID是根据它们所代表的文档的相关性排序的?或者对我们的场景有更好的方法吗?

谢了!

共有1个答案

卢德惠
2023-03-14

如果有人对我们如何解决这个问题感兴趣,我现在给出一个可能的解决方案。这很可能不是解决问题的最佳办法。

将top_hits聚合添加到terms聚合中,包括得分最高的文档及其对应的分数到桶中:

curl localhost:9200/german,english,french/_search?pretty=1 -d 
'{
    "aggs": {
        "asset_ids": {
            "terms": {
                "field": "_id"
            },
            "aggregations": {
                "top_id_hits": {
                    "top_hits": {}
                }
            }
        }
    }
}'

通过最佳评分文档(也就是max_score)对检索到的桶进行排序,最终实现了这一目的。

https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-top-hits-aggregation.html

 类似资料:
  • 问题内容: 我正在尝试使用以下查询对以下数据进行elasticsearch来执行术语聚合,输出将名称分解为标记(请参见下面的输出)。因此,我尝试将os_name映射为multi_field,但现在无法通过它查询。是否可以有没有令牌的索引?例如“ Fedora Core”? 查询: 数据: 输出: 映射: 问题答案: 实际上,您应该像这样更改映射 并且您的aggs应该更改为:

  • 问题内容: 我有两种日志消息: 第一个消息是已发送消息的类型,第二个消息是确认消息已传递的消息。 它们之间的区别是后缀,我已将其与“ id”分开并可以对其进行查询。 这些消息将按以下格式解析并存储在elasticsearch中: 我想找出哪些消息已成功发送,哪些没有成功。我是Elasticsearch的初学者,所以我真的很努力。 我目前正在尝试术语聚合,但是我所能实现的就是以下代码: 向我显示已发

  • 我有一个存储字符串数组的字段。不同的文档包含不同的字符串集。 现在,我使用这个聚合查询来分析每个文件类型的使用情况。 结果与预期一致。但最近我在删除XML文件支持后更新了此字段。因此,文档的non具有文件类型XML。我可以从这个查询中确认这一点。 总命中计数为零。奇怪的是,当我再次执行上述聚合查询时,我仍然可以将XML视为一个术语。doc count为零。 如果这个XML术语在任何文档中都不存在,

  • 我想根据top hits聚合中第一个元素所拥有的属性,从terms聚合中订购Bucket。 我的尽力而为查询如下(有语法错误): 有人知道如何做到这一点吗? 例子: 按“a”分组,按“id”(desc)排序存储桶,并按“b”(desc)排序最热门的内容,将给出:

  • 数据 我在ES索引中保留了对象。其中每个字段都有一个myKey和myName字符串字段(持久化为关键字字段)。不能保证同一个myKey的myName总是相同的。E、 g.以下两个条目共享相同的myKey,但具有不同的myName值: 挑战 我需要选择并返回所有不同的myKey值,查找并显示最可能的myName(myKey上下文中出现的最多),并按myName对生成的Bucket进行排序。 到目前为

  • 问题内容: 如何编写一个将整个字段值而不是单个标记考虑在内的ElasticSearch术语聚合查询?比如,我想通过城市名聚集,但下面的回报,,并作为单独的水桶,不和的水桶预期。 问题答案: 您应该在映射中解决此问题。添加一个not_analyzed字段。如果您还需要分析的版本,则可以创建多字段。 现在在city.raw上创建聚合