Ich versuche, die ElasticSearch Abfragesprache zu knacken, und bis jetzt bin ich nicht sehr gut.ElasticSearch Abfrage auf Tags
Ich habe die folgende Zuordnung für meine Dokumente.
{
"mappings": {
"jsondoc": {
"properties": {
"header" : {
"type" : "nested",
"properties" : {
"plainText" : { "type" : "string" },
"title" : { "type" : "string" },
"year" : { "type" : "string" },
"pages" : { "type" : "string" }
}
},
"sentences": {
"type": "nested",
"properties": {
"id": { "type": "integer" },
"text": { "type": "string" },
"tokens": { "type": "nested" },
"rhetoricalClass": { "type": "string" },
"babelSynsetsOcc": {
"type": "nested",
"properties" : {
"id" : { "type" : "integer" },
"text" : { "type" : "string" },
"synsetID" : { "type" : "string" }
}
}
}
}
}
}
}
}
Es ähnelt hauptsächlich einer JSON-Datei, die sich auf ein PDF-Dokument bezieht.
Ich habe versucht, Abfragen mit Aggregationen zu machen und bis jetzt läuft es super. Ich bin zu dem Punkt der Gruppierung durch (Aggregation) rhetoricalClass
gekommen, um die Gesamtzahl der Wiederholungen von babelSynsetsOcc.synsetID
zu erhalten. Heck, sogar die gleiche Frage, sogar durch die Gruppierung des gesamten Ergebnisses durch header.year
Aber gerade jetzt, ich kämpfe mit dem Filtern der Dokumente, die einen Begriff enthalten und die gleiche Abfrage tun.
Also, wie könnte ich eine Abfrage machen, so dass Gruppierung von rhetoricalClass
und nur die Berücksichtigung der Dokumente, deren Feld header.plainText
entweder ["Computational", "Compositional", "Semantics"]
enthält. Ich meine contain
statt equal
!.
Wenn ich eine grobe Übersetzung machen es ähnlich, etwas zu SQL
SELECT count(sentences.babelSynsetsOcc.synsetID)
FROM jsondoc
WHERE header.plainText like '%Computational%' OR header.plainText like '%Compositional%' OR header.plainText like '%Sematics%'
GROUP BY sentences.rhetoricalClass
Ja, Sie haben völlig recht, ich sollte mehr Mühe geben die Dokumentation zu lesen, aber es ist so eine schmerzhafte Arbeit ihrer offiziellen doc zu lesen. Das einzige, was in meinen Abfragen fehlte, war der verschachtelte Filter, ich weiß nicht, wie ich das übersehen hätte. Wie auch immer, vielen Dank für Ihren Beitrag – Mayhem