Hallo Leute, ich bin neu in der elastischen Suche, aber ich habe die grundlegende Dokumentation von ElasticSearch 5.1 durchgelesen.Elasticsearch Suchabfrage mit mehreren Filtern
Problem in einer Zeile:
Suche ist erfolgreich, aber Filter funktionieren nicht richtig.
Mapping-Datentypen
{
"properties": {
"title": {"type": "string"},
"description": {"type": "string"},
"slug": {"type": "string"},
"course_type": {"type": "string", "index" : "not_analyzed"},
"price": {"type": "string"},
"categories": {"type": "keyword", "index" : "not_analyzed"},
"tags": {"type" : "keyword"},
// "tags": {"type" : "keyword", "index" : "not_analyzed"},
"status": {"type" : "string","index" : "not_analyzed"},
}
}
Wie @Darth_Vader bemerkt habe ich versucht, auch Mapping. Es folgt mein Mapping
Dokument in Index (Erf-1)
....
{
"_index": "learnings",
"_type": "materials",
"_id": "582d9xxxxxxxx9b27fab2c",
"_score": 1,
"_source": {
"title": "Mobile Marketing",
"slug": "mobile-marketing",
"description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla eleifend hendrerit vehicula.",
"categories": [
"Digital Marketing"
],
"tags": [
"digital-marketing",
"mobile-marketing"
],
"status": "published"
}
},
...
Wie oben Ich habe wie hundert Dokumente in einem Index
SUCHE QUERY FULL, die ich bin mit
"query": {
"bool": {
"must": {
"multi_match" : {
"query" : "mobile",
"fields" : [ "title^5", "tags^4", "categories^3" ],
"operator": "and"
}
},
"filter": {
"bool" : {
"must" : [
{"term" : {"status": "published"} }
]
}
}
}
}
In der obigen Abfrage ist das wichtigste Suchkriterium/Filter
{"term" : {"status": "published"} }
. Jedes Suchergebnis muss die Anforderung erfüllen.Jetzt von der Liste der Ergebnisse, möchte ich mehr filtern. Also sage ich nur
documents
diemobile-marketing
alstag
haben soll. Mein Dokument (Erf-1) hat diesetag
(mobile-marketing
)
Das Problem ist jetzt:
Wenn ich meine Suchabfrage ändern und fügen Sie meine erforderlich Filter wie folgt: Ich bekomme kein Suchergebnis (Hits = 0), obwohl mein Dokument (Req-1)hat 0 als tag
"filter": {
"bool" : {
"must" : [
{"term" : {"status": "published"} },
{"term" : {"tags": "mobile-marketing"} }
]
}
}
ABER wenn ich den Filter
{"tags": "mobile-marketing"}
TO{"tags": "mobile"}
ändern, erhalte ich das gewünschte Dokument (Erf-1) als Ergebnis.
ich wollen das gleiche Dokument mit diesen Filter bekommen: {"tags": "mobile-marketing"}
. Also, wo mache ich falsch?
Welche Änderung benötigt meine Suchanfrage?
Dank
[Für Leute mit ähnlichen Problemen] .Das obige Verfahren und der damit verbundene Code funktioniert, stellen Sie sicher, dass Sie richtige Indexnamen und Indextypen zum Zeitpunkt der Zuordnung und andere damit verbundene Operationen –