2014-03-01 182 views
2

我有一個關於我的elasticsearch數據庫索引的設置的問題...我創建了一個表,我已經在elasticsearch中索引了。該表是從該查詢多個表以非規範化數據使它更容易索引由一個唯一的id 1腳本構建的:1的比例Elasticsearch索引數據庫表列結構

一組字段的我是streetcitystatezip,的一個例子,其我可以查詢,但我的問題是,我應該保持這些字段單獨編入索引,還是將它們連成一個像address這樣的大字段,其中包含以前的所有字段?還是要花費額外的時間來設置親子指數?

的使用情況實例是我有帳單信息從一個方向傳來一個客戶,我要查詢elasticsearch,看看是否已有客戶,或者至少返回最接近的結果

我知道這個問題是比編程更概念化,我無法找到最佳實踐的任何信息。

回答

2

級聯

對於你的問題的第一部分:我不會串聯不同的領域爲包含所有信息的字段。擁有多個字段可爲您計算這些字段上的方面和聚合的優勢,例如,有多少客戶來自特定城市或具有特定的郵政編碼。您仍然可以使用匹配或多匹配查詢來查詢來自不同字段的信息。

除了具有獨立字段中的信息之外,我還將使用帶分析和not_analyzed部分的多字段(fieldname.raw)。這又允許聚合,分面和排序。

http://www.elasticsearch.org/guide/en/elasticsearch/reference/0.90/mapping-multi-field-type.html

「紐約」的想:如果你分析它會被保存爲[「新」,「紐約」],你將無法看到「紐約所有的人。你會看到所有來自'New'和'York'的人。

_all場

有一個在elasticsearch這確實串聯在後臺一個特殊的_all場。你不必親自去做。可以啓用/禁用它。

父子關係

關於部分是否使用嵌套對象或父子關係:我覺得用一個父子關係更適合你的情況。嵌套對象以「拼合」方式存儲,即來自數組中嵌套對象的信息被存儲爲一個對象的一部分。請看下面的例子:

您有一個訂單的客戶:

client: 'Samuel Thomson' 
    orderline: 'Strong Thinkpad' 
    orderline: 'Light Macbook' 
client: 'Jay Rizzi' 
    orderline: 'Strong Macbook' 

使用嵌套的對象,如果你搜索誰下令「強的Macbook」,你會得到兩個客戶端的客戶端。這是因爲「Samuel Thomson」和他的訂單完全保存在一起,即['Strong''Thinkpad''Light''Macbook'],所以兩條命令行之間沒有區別。

通過使用父級子文檔,同一客戶端的訂單行不會混合並保留其身份。

+1

謝謝你回答了我的許多問題! –