it-swarm.com.de

ElasticSearch, Multi-Match mit Filter?

Ich habe eine Mehrfachabfrage in ES und möchte einen Filter hinzufügen.

{
  "multi_match" : {
    "query" : "this is a test",
    "fields" : [ "subject^2", "message" ]
  }
}

Wie lautet die Syntax zum Hinzufügen dieses Filters?

Ich habe es versucht:

{
  "multi_match" => {
    "query" => "list",
    "fields" => [ "username" ]

  },
"filter" => {
        "term" => { "username" => "slimkicker"}
    }
}
39
Henley Chiu

Je nachdem, was Sie brauchen, müssen Sie den Filter in die richtige Position bringen. Sie haben zwei Möglichkeiten:

Verwenden Sie einen Filter der obersten Ebene und wenden Sie den Filter nur auf die Suchergebnisse an, nicht auf die Facetten

{
    "query" : {
        "multi_match" : {
            "query" : "this is a test",
            "fields" : [ "subject^2", "message" ]
        }
    },
    "filter" : {
        "term" : { "username": "slimkicker" }
    }
} 

Verwenden Sie eine gefilterte Abfrage und wenden Sie den Filter sowohl auf die Suchergebnisse als auch auf die Facetten an

{
    "query" : {
        "filtered" : {
            "query" : {
                "multi_match" : {
                    "query" : "this is a test",
                    "fields" : [ "subject^2", "message" ]
                }
            },
            "filter" : {
                "term" : { "username": "slimkicker" }
            }
        }
    }
}
63
javanna

Mit Elasticsearch 5 wurde die Syntax geändert , um die Verwendung von bool query, z.

{
  "from" : 0,
  "size" : 10,
  "sort" : "publishDate",
  "query": {
    "bool": {  
      "must" : {
        "multi_match" : {
          "query":      "wedding",
          "type":       "most_fields",
          "fields":     [ "title", "text" ]
        }
      },
      "filter": {
        "term": {
          "locale": "english"
        }
      }
    }
  }
}

Dokumentation finden Sie hier .

56
Fritz Duchardt

Gemäß der neuen Dokumentation von Elasticsearch wurde das Format geringfügig geändert. Jetzt müssen Sie bool und must verwenden und können filter getrennt von der Abfrage wie folgt anwenden:

{
    'index' : 'users',
        'type' : 'users',
        'body' : {
          "query" : {
            "bool" : {
              "must" : {
                'multi_match' : {
                    'fields' : {'source^1', 'first_name^5', 'last_name^4', 'email^3', 'postcode^2', 'telephone', 'address', 'alternate_address'
                    },
                    'query' : 'Shahrukh Anwar',
                },
              },
              "filter" : {
                "term" : {
                  'assigned_to' : 125
                }
              }
            }
          }
        }
}
6
Shahrukh Anwar