ich Dokumente, die wie folgt aussehen:ElasticSearch: einschließlich verschachtelter Felder in _all?
{"foo" : "blah blah blah",
"bar" : "bla bla bla",
"baz" : [{"href" : "someid"}, {"href" : "otherid"}, ...],
... }
ich eine Suche machen wollen, dass alle Dokumente findet, wo id
in einer der href
Subdokumente auftritt. Wenn ich baz.href
im Mapping unanalyzed bin, kann ich nach baz.href
mit einer Begriff Abfrage ganz gut suchen.
Was ich jedoch wirklich will, ist in der Lage, nach dieser ID zu suchen, egal wo sie auftritt. Es könnte in baz.href
, quux.href
oder whatever.href
sein. Suchen in _all
wäre vollkommen akzeptabel.
Allerdings kann ich einfach nicht funktionieren. Ich bekomme nie irgendwelche Ergebnisse, außer ich suche genau nach baz.href
.
Ich versuchte Einstellung auf baz
in der Zuordnung, ohne Erfolg. Ich habe versucht, es auf baz.href
zu setzen, und das hat auch nicht funktioniert.
Ich weiß, ich könnte die IDs in einem separaten all_hrefs
Feld in der obersten Ebene duplizieren, aber das sprengt die Dokumente unnötig, und scheint nur hässlich. Die Referenzlisten können ziemlich groß sein. Ich konnte auch meine eigenen Zuordnungen analysieren und alle href
s dort finden, so dass ich alle href
Felder explizit in der Abfrage auflisten konnte, aber wenn das Datenmodell wächst, wird das schließlich nicht mehr skalieren.
Hilfe?
Update: Die Zuordnung für das datasets
Feld (und alle anderen Felder, die href
s enthalten wie folgt aussieht):
"datasets" : {
"properties" : {
"href" : {
"include_in_all" : true,
"index" : "not_analyzed",
"type" : "string"
}
},
"type" : "nested"
},
Ich habe versucht, mit den nested
fallen, und die include_in_all
fallen, aber es macht keinen Unterschied. Als ich nested
hatte, konnte ich eine verschachtelte Abfrage verwenden, aber die path
muss auf datasets
festgelegt werden, da *
fehlschlägt, da nicht alle Felder verschachtelte Objekte enthalten.
Leider ist dies für mich nicht funktioniert. Der Unterschied ist, dass in meinem Fall die 'href'-Unterfelder' index: not_analyzed 'haben, was notwendig ist, um falsche Positive von ähnlichen IDs zu vermeiden. Ich habe '* .href' in der Begriffsabfrage versucht, aber das funktioniert nicht.Ich habe auch versucht, 'analyzer: keyword' in der' query_string'-Abfrage zu setzen, aber das hat auch nicht funktioniert. Vielen Dank für den Versuch! –
Können Sie dann ein Beispiel für das Mapping, das Sie für diesen Index verwenden, ausgeben? Das würde helfen, das Problem zu reproduzieren und weiter zu helfen, es zu beheben. –
Ich habe Ihren Vorschlag erneut mit 5.1 versucht, und ich bekomme Suchergebnisse, aber ich bekomme zu viele. Ich möchte nach ID suchen, aber die Suche findet ähnliche, aber nicht identische Werte. –