cela devrait être évident pour moi mais ce n'est pas le cas. Les deux correspondances suivantes uniquement la deuxième phase (dans ce cas, Cape Basin
)
"query": {
"match_phrase": {
"contents": {
"query": "St Peter Fm",
"query": "Cape Basin"
}
}
}
"query": {
"match_phrase": {
"contents": {
"query": ["St Peter Fm", "Cape Basin"]
}
}
}
tandis que les croassements suivants avec une erreur
"query": {
"match_phrase": {
"contents": {
"query": "St Peter Fm"
},
"contents": {
"query": "Cape Basin"
}
}
}
Je veux faire correspondre tous les documents qui contiennent des phrases soit exactement comme entrées.
Votre première requête n'est pas vraiment un objet JSON valide car vous utilisez deux fois le même nom de champ.
Vous pouvez utiliser un bool must query pour faire correspondre les deux phrases:
PUT phrase/doc/1
{
"text": "St Peter Fm some other text Cape Basin"
}
GET phrase/_search
{
"query": {
"bool": {
"must": [
{"match_phrase": {"text": "St Peter Fm"}},
{"match_phrase": {"text": "Cape Basin"}}
]
}
}
}
Il s'avère que vous pouvez le faire en activant la sémantique des phrases pour multi_match
.
Pour ce faire, vous ajoutez un type:
attribut à multi_match
syntaxe comme ci-dessous:
GET /_search
{
"query": {
"multi_match" : {
"query": "quick brown fox",
"type": "phrase",
"fields": [ "subject", "message" ]
}
}
}
Une fois que vous y pensez de cette façon (par rapport à l'activation du support "multi" sur d'autres clauses de recherche), il s'intègre là où vous vous attendez.