2016-09-15 75 views
0

我有一個字段,我索引到Elasticsearch是一個字符串數組。因此,舉例來說,這裏是字符串數組將是什麼樣子的兩項紀錄:在彈性搜索字符串數組中的多個值

Record 1: {"str1", str2", str3", "str4", "str5"} 

Record 2: {"str1", str2", str6", "str7", "str8"} 

問題1:我希望能夠查詢此數組中多個字符串。對於例如我的查詢有「str1」,「str2」。 「str3」作爲搜索參數。我想搜索在字符串數組有任何這三個串

問題2的記錄:對於上述情形會記錄1回用更高的分數比創紀錄的(因爲所有這三個字符串數組中記錄1,但記錄2中只有兩個)。

這可能嗎?你可以請求幫助,查詢應該是什麼樣子,如果得分符合我說的方式。

回答

1

你可以索引他們作爲an array,如:

{ 
    "myArrayField": [ "str1", str2", str3", "str4", "str5" ], 
    ... 
} 

你可以這樣能夠查詢多種方式,最簡單的爲您的情況是一個match query(被分析):

{ 
    "match" : { 
     "myArrayField" : "str1 str2 str3" 
    } 
} 

或者一個terms query(未分析的):

{ 
    "terms" : { 
     "myArrayField" : [ "str1", "str2", "str3" ] 
    } 
} 

,與更多查詢條件的匹配將獲得更高的分數,因此記錄1的得分高於記錄2的記錄。