我們有一個雙節點集羣(私有云中的虛擬機,64GB的RAM,每個節點8個核心CPU,CentOS),一些小指數(約1萬個文檔)和一個大型索引文檔(2個碎片,170GB的空間)。 24GB內存分配給每個盒子上的彈性搜索。ElasticSearch搜索性能
文檔結構:
{
'article_id': {
'index': 'not_analyzed',
'store': 'yes',
'type': 'long'
},
'feed_id': {
'index': 'not_analyzed',
'store': 'yes',
'type': 'string'
},
'title': {
'index': 'analyzed',
'type': 'string'
},
'content': {
'index': 'analyzed',
'type': 'string'
},
'lang': {
'index': 'not_analyzed',
'type': 'string'
}
}
大約需要1-2秒運行下面的查詢:
{
"query" : {
"multi_match" : {
"query" : "some search term",
"fields" : [ "title", "content" ],
"type": "phrase_prefix"
}
},
"size": 20,
"fields" :["article_id", "feed_id"]
}
我們是打在這一點上硬件的限制,還是有方法來優化查詢或數據結構來提高性能?
在此先感謝!
謝謝您的回答,我會玩的max_expansion選項。其實我對查詢FEED_ID一個條件過濾器,但我認爲過濾器應用於結果集,搜索完成後,我想我是錯的假設... – flext
只要你使用的是'過濾'查詢來過濾它,過濾器將在查詢本身之前應用(或多或少)。確切的順序取決於ES內部的查詢優化器,但您可以放心地將其視爲「之前」。但是,如果您使用的是頂級過濾器,它將在查詢後應用,並且不會獲得良好的性能。 – Zach
好點,我使用頂級過濾器。我還在彈性搜索googlegroup中找到了關於過濾查詢與頂級槓桿過濾器查詢的解釋。現在有很多意義。再次感謝! – flext