Ich denke, ein besserer Weg wäre, die percolator
mapping type zu verwenden. Erstellen Sie zuerst einen Index, in dem Sie Ihre geo_shape
Abfragen speichern (unter queries
). Sie müssen auch die Abbildung Ihrer Punkte (im points
-Typ) zu definieren, so dass ES weiß, was es gegen abfragt:
PUT /my-index
{
"mappings": {
"points": {
"properties": {
"point": {
"type": "geo_shape"
}
}
},
"queries": {
"properties": {
"query": {
"type": "percolator"
}
}
}
}
}
Dann können Sie Index ein geo_shape
Abfrage für jedes Ihrer bereits indiziert Polygon. Hier sind die Definition wir eine geo_shape
Abfrage für jedes Polygon, die Sie bereits in polygon-index
gespeichert haben:
PUT /my-index/queries/query-id-for-polygon-id
{
"query" : {
"geo_shape": {
"location": {
"indexed_shape": {
"index": "polygon-index",
"type": "polygon-type",
"id": "polygon-id",
"path": "polygon-field"
}
}
}
}
}
Schließlich können Sie eine einzelne msearch
query Ausgabe einer percolate
query für jeden der Punkte enthält, die Sie überprüfen möchten.
Eine Perkolatabfrage für einen einzelnen Punkt würde so aussehen. Diese Abfrage sagt im Wesentlichen: "Finde alle Polygonabfragen, die den gegebenen Punkt enthalten". Als Ergebnis erhalten Sie eine Trefferliste, bei der jeder Treffer eine Abfrage ist und die ID des entsprechenden Polygons (Abfrage) enthält.
POST /my-index/_search
{
"query" : {
"percolate" : {
"field" : "query",
"document_type" : "points",
"document" : {
"point" : {
"type" : "point",
"coordinates" : [-77.03653, 38.897676]
}
}
}
}
}
So, jetzt müssen Sie einer von denen für jeden der Punkte, die Sie in folgendem Format überprüfen, erstellen möchten:
POST /my-index/_search
{}
{"query": {"percolate": {"field": "query", "document_type" : "points", "document" : {"point" : {"type" : "point","coordinates" : [-77.03653, 38.897676]}}}}}
{}
{"query": {"percolate": {"field": "query", "document_type" : "points", "document" : {"point" : {"type" : "point","coordinates" : [-77.03653, 38.897676]}}}}}
{}
{"query": {"percolate": {"field": "query", "document_type" : "points", "document" : {"point" : {"type" : "point","coordinates" : [-77.03653, 38.897676]}}}}}
{}
{"query": {"percolate": {"field": "query", "document_type" : "points", "document" : {"point" : {"type" : "point","coordinates" : [-77.03653, 38.897676]}}}}}
...
Sie werden wieder für jeden Punkt, die Polygone, die enthalten es.
Ich denke, ein besserer Weg wäre, den "Percolator" Mapping-Typ zu verwenden und eine "geo_shape" -Abfrage für jedes Polygon zu speichern. Als nächstes können Sie eine einzelne "msearch" -Abfrage mit einer "Perkolat" -Abfrage für jeden der Punkte, die Sie überprüfen möchten, ausgeben. Sie erhalten für jeden Punkt die Polygone, die ihn enthalten. – Val
Ich wusste bis jetzt nichts über Perkolat, Danke für Ihren Kommentar Ich werde versuchen, mehr darüber zu lesen. – mhndev
Ich ging voran und gab Ihnen einen kurzen Hinweis auf die Lösung. – Val