Ich habe Probleme beim Kombinieren von Begriff, muss nicht Abfragen auf verschachtelten Dokumenten. http://sense.qbox.io/gist/be436a1ffa01e4630a964f48b2d5b3a1ef5fa176Begriff, verschachtelte Dokumente und muss nicht Abfrage in ElasticSearch inkompatibel sein?
Hier meine Mapping:
{
"mappings": {
"docs" : {
"properties": {
"tags" : {
"type": "nested",
"properties" : {
"type": {
"type": "string",
"index": "not_analyzed"
}
}
},
"label" : {
"type": "string"
}
}
}
}
}
mit zwei Dokumente in diesem Index:
{
"tags" : [
{"type" : "POST"},
{"type" : "DELETE"}
],
"label" : "item 1"
},
{
"tags" : [
{"type" : "POST"}
],
"label" : "item 2"
}
Wenn ich so abfragen, diesen Index:
Sense Beispiel kann hier gefunden werden
{
"query": {
"nested": {
"path": "tags",
"query": {
"bool": {
"must": {
"term": {
"tags.type": "DELETE"
}
}
}
}
}
}
}
Ich habe einen Treffer erhielt (was richtig ist)
Wenn ich will Dokumente erhalten, die nicht den Tag enthalten "DELETE", mit dieser Abfrage:
{
"query": {
"nested": {
"path": "tags",
"query": {
"bool": {
"must_not": {
"term": {
"tags.type": "delete"
}
}
}
}
}
}
}
I‘ Habe 2 Treffer (was falsch ist). Dieses Problem scheint sehr ähnlich zu diesem (Elasticsearch array must and must_not) aber es ist nicht ...
Können Sie mir einige Hinweise geben, um dieses Problem zu lösen?
Danke
Danke, es funktioniert. Kannst du erklären, warum du so warst? – user3393203
Einfach weil es ohne "include_in_root" nicht möglich war. Anstatt ein komplexes geschachteltes Filter-/Abfragesystem zu haben, können Sie nun einfach alle "tags.type" als Array behandeln. Auf diese Weise können Sie etwas wie "Geben Sie mir alle Dokumente ohne" DELETE "im Array" Tag-Typen "sagen. Es ist nicht leicht, dieses Zeug manchmal zu verbalisieren, aber hoffentlich macht das Sinn! –
Es funktioniert nicht für mich. Das ist komisch und traurig zugleich. Vielleicht, weil ich 'terms' und' integer' verwende? –