2015-08-13 109 views
0

我们目前正在研究多语言文档CMS。因此我们有翻译成不同语言的文件。Elasticsearch术语汇总排序

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

当用户搜索特定术语时,我们希望在所有语言中进行搜索,但只返回不同ID的列表。据我所知,这是唯一可能使用的术语汇总如下所示:

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

这工作得很好,但随着elasticsearch文档 https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html#search-aggregations-bucket-terms-aggregation-order

状态,这将返回有序不同ID的列表按每桶文件数量计算。

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

谢谢!

回答

0

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

添加top_hits聚集的条款聚集包括得分最高的文件及其相应的分数的水桶:

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