如何找到与不同查询中的所有单词匹配的文档?

How can I find documents which match all words in differents queries?

例如使用此映射:

PUT /unit-test
{
  "mappings": {
    "properties": {
      "name": { "type": "text" },
      "landlords": {
        "type": "nested", 
        "properties": {
          "name": { "type": "text" }
        }
      }
    }
  }
}

如果我有这个文件:

{ 
  "name": "T2 - Boulevard Haussmann - P429",
  "landlords": [
    { "name": "John Doe" }
  ] 
} 

我希望“boulevard hausmann”和“boulevard haussman doe”匹配,但不匹配“rue haussman”或“haussman jeanne”。

我不能将 multi_match"operator": "and" 一起使用,因为 landlords 是嵌套的。

一个想法是将 copy_to 映射参数设置为 namelandlords.name 字段,以便将两个字段的值复制到另一个字段(例如,names),您将用于搜索。

因此您的映射可能如下所示:

{
  "mappings": {
    "properties": {
      "name": {
        "type": "text",
        "copy_to": "names"
      },
      "landlords": {
        "type": "nested",
        "properties": {
          "name": {
            "type": "text",
            "copy_to": "names"
          }
        }
      },
      "names": {
        "type": "text"
      }
    }
  }
}

和您的搜索

{
  "query": {
    "match": {
      "names": {
        "query": "boulevard haussman doe",
        "operator": "AND"
      }
    }
  }
}