Multi-"match-phrase" query in Elastic Search

elasticsearch, elasticsearch-query, match-phrase

Solution

Your first query is not really a valid JSON object because you use the same field name twice.

You can use a bool must or should query to match both OR one of the phrases:

    PUT phrase/doc/1
    {
      "text": "St Peter Fm some other text Cape Basin"
    }

    //Match BOTH
    GET phrase/_search
    {
      "query": {
        "bool": {
          "must": [
             {"match_phrase": {"text":  "St Peter Fm"}},
             {"match_phrase": {"text":  "Cape Basin"}}
          ]
        }
     }
    }

    //Match EITHER ONE
    GET phrase/_search
    {
      "query": {
        "bool": {
          "should": [
             {"match_phrase": {"text":  "St Peter Fm"}},
             {"match_phrase": {"text":  "Cape Basin"}}
          ]
        }
     }
    }

Problem

this should be obvious to me but is not. The following two-match only the second phase (in this case, `Cape Basin`) ``` "query": { "match_phrase": { "contents": { "query": "St Peter Fm", "query": "Cape Basin" } } } "query": { "match_phrase": { "contents": { "query": ["St Peter Fm", "Cape Basin"] } } } ``` while the following croaks with an error ``` "query": { "match_phrase": { "contents": { "query": "St Peter Fm" }, "contents": { "query": "Cape Basin" } } } ``` I want to match all documents that contain either phrases exactly as entered.

Original source