2013-06-01 154 views
4

我使用elasticsearch構建了一個自動完成搜索,因此我需要查詢3個索引postscommentsauthors。我有以下查詢:Elasticsearch - 對多索引查詢進行排序

{ 
    "query":{ 
     "query_string":{ 
     "query":"something" 
     } 
    } 
} 

電話:

curl -X GET 'http://localhost:9200/posts,comments,authors/_search?pretty' -d '{ 
    "query": { 
    "query_string": { 
     "query": "something" 
    } 
    } 
}' 

我需要通過特定的索引字段對結果進行排序,例如:

帖子指數有一個字段名爲comments_count評論votes_count和作者posts_count。當比較帖子時,則應按comments_count排序,當評論時votes_count,當時作者爲posts_count

可以這樣做嗎?我不想將索引合併爲一個索引,因爲它們索引完全不同的文檔。

回答

2

那麼,我的問題是,如果我排序的字段不存在於所有索引中,文檔將不會被返回。

管理與解決:

{ 
    "_script":{ 
     "script":"type=doc['_type'].value;if(type=='posts'){return doc['comments_count'].value} else {return 0};", 
     "type":"number", 
     "order":"desc" 
    } 
} 

至少現在的文件顯示,即使在底部。

+0

「如果我排序所有索引中不存在的字段,文檔將不會返回」。這是可控的。參見http://www.elasticsearch.org/guide/reference/api/search/sort/。在你的情況下,你應該使用'{「missing」:「_last」}' –

0

而不是使用comments_countvotes_countposts_count的,你可以投入指數相同的名稱(如items_count)和執行通常的排序:

{ 
    "sort": [ 
    { "items_count": "desc" } 
    ] 
} 

如果有缺乏items_count其他實體有一個選項,以ignore unmapped fields

{ 
    "sort": [ 
    { "items_count": { "order": "desc", "unmapped_type": "long" } } 
    ] 
} 
相關問題