2015-08-13 142 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