2012-10-04 86 views
2

比方說,我存儲這樣的文件在ElasticSearch:如何根據ElasticSearch中的項目數量對搜索結果進行排序?

{ 
    'name':'user name', 
    'age':43, 
    'location':'CA, USA', 
    'bio':'into java, scala, python ..etc.', 
    'tags':['java','scala','python','django','lift'] 
} 

而且我們說,我搜索使用位置= CA,我怎麼能按照「標籤」的項目的數量對結果進行排序?

我想列出第一頁中標記數最多的人。

回答

3

您可以對包含標籤數量的附加字段建立索引,然後您可以輕鬆地對結果進行排序。否則,如果你願意支付,查詢時間一點點性能開銷有,不需要重新索引你的數據一個很好的解決方案:你可以sort基於這樣的腳本:

{ 
    "query" : { 
     "match_all" : {} 
    }, 
    "sort" : { 
     "_script" : { 
      "script" : "doc['tags'].values.length", 
      "type" : "number", 
      "order" : "asc" 
     } 
    } 
} 

正如你可以閱讀基於排序部劇本:

注意,建議,對於單定製基於腳本根據排序, 使用custom_score查詢,而不是作爲排序依據分數更快。

這意味着,它會是更好地使用custom score query來影響你的分數,然後排序得分,就像這樣:

{ 
    "query" : { 
     "custom_score" : { 
      "query" : { 
       "match_all" : {} 
      }, 
      "script" : "_score * doc['tags'].values.length" 
     } 
    } 
} 
+0

了不起的答案。謝謝。 –

+0

很酷,不客氣! :) – javanna

相關問題