0

我想在索引的多個字段中使用multi_matchElasticSearch - 使用AND/OR的多重匹配

例如,我有這個用戶索引。

Users 
id 
real_name 
contact_name 
user_name 

這些字段都使用標準分析儀。所以我想搜索這3個字段(real_name,contact_name,user_name),並尋找那些在這些字段中至少有一個同時包含「John」和「Peter」的用戶。

我知道如果我不需要AND部分,我可以使用multi_match。例如:只搜索約翰:

{ 
    "multi_match" : { 
    "query": "john", 
    "fields": [ "real_name", "contact_name", "user_name" ] 
    } 
} 

https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-multi-match-query.html#query-dsl-multi-match-query

但我怎麼做,如果我想更多的and條件。是否有可能通過multi_match來做到這一點?

+0

你想要什麼樣的附加條件?請展示一些簡單的例子? – Mysterion

回答

0

試試這個。 John必須出現在real_name或contact_name或user_name中。

{ 
"bool": { 
    "should": [ 
     { 
      "multi_match" : { 
      "query":  "john", 
      "type":  "cross_fields", 
      "fields":  [ "real_name", "contact_name", "user_name" ], 
      "minimum_should_match": "50%" 
      } 
     } 
    ] 
    } 
} 
+0

''minimum_should_match「:」50%「'不是AND子句。改用'「運算符」:「AND」'。 minimun應該匹配的是定義條款應該如何匹配定義的字段。 https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-multi-match-query.html#operator-min – NicolasY