2012-03-08 119 views
3

我在ElasticSearch指數9000個文檔。彈性搜索文件排序,索引問題

我想通過分析字符串字段排序,所以,爲了做到這一點,我知道(通過谷歌),我必須更新映射,使字段不被分析,所以我可以按這個字段排序,我必須再次重新索引數據以反映映射的變化。

重新索引過程我的機器上消耗了大約20分鐘。

奇怪的是,重新索引過程中消耗約2小時一個非常強大的生產服務器上。

我檢查內存狀態和服務器上的處理器使用,一切正常。

我想知道的是:

  1. 有沒有一種方法,而無需重新索引整個文件通過分析,切分領域對文檔進行排序?

  2. 如果我必須重新索引整個文件,那麼它爲什麼需要這麼大的時間重新索引服務器上的文件?或如何追蹤該服務器上的緩慢原因?

+2

至於1.任何對映射的更改都需要reindex。然而,對於分析領域(用於顯示/搜索目的等)和非分析領域(包含相同數據)來並排排列生活,它是完全有效的(並且做了很多很多次)。也許這會回答你隱含的用例,我似乎從你的問題中推斷出來。 – 2012-03-09 15:21:49

+2

使用http://www.elasticsearch.org/guide/reference/mapping/multi-field-type.html可以輕鬆完成對多個字段的相同數據映射(正如我上面所建議的那樣),它不需要更改爲您的客戶端代碼 – 2012-03-09 15:24:43

回答

0

只要該字段存儲在_source中,我敢肯定你可以使用腳本來創建一個自定義字段,每次你搜索。

{ 
    "query" : { "query_string" : {"query" : "*:*"} }, 
    "sort" : { 
    "_script" : { 
     "script" : "<some sorting field>", 
     "type" : "number", 
     "params" : {}, 
     "order" : "asc" 
    } 
    } 
} 

這有缺點重新評估每次搜索時在服務器端的排序腳本,但我解決它(1)。