2016-04-07 8 views
0

======== Nachstehend versucht, auf einer Liste abzufragen, hat aber nicht funktioniert ============
Eingabesatz:Erhalte keine beabsichtigte Ausgabe beim Abfragen einer Liste in ElasticSearch

{ 
    "somerecord": [ 
    { 
     "fieldValue": "1", 
     "sampleKey": [ 
     "1", 
     "2" 
     ] 
    }, 
    { 
     "fieldValue": "2", 
     "sampleKey": [ 
     "3", 
     "4" 
     ] 
    } 
    ] 
} 

Output erwartet oder benötigt für „fieldvalue“:“1” Suche:

{ 
    "fieldValue": "1", 
    "sampleKey": [ 
    "1", 
    "2" 
    ] 
} 

Schritte:
Erstellt eine Zuordnung
Setzen Sie einen Datensatz
Abfrage verschiedene Abfragetypen

Referenzen mit:

http://www.spacevatican.org/2012/6/3/fun-with-elasticsearch-s-children-and-nested-documents/ https://www.elastic.co/guide/en/elasticsearch/guide/current/nested-mapping.html https://www.elastic.co/guide/en/elasticsearch/reference/current/nested.html https://gist.github.com/nicolashery/6317643 http://elasticsearch-cheatsheet.jolicode.com/ http://obtao.com/blog/2014/04/elasticsearch-advanced-search-and-nested-objects/ http://joelabrahamsson.com/elasticsearch-nested-mapping-and-filter/

Bitte lassen Sie mich wissen, wie Sie erreichen, was ich beabsichtige.

======== Einige Befehl ausgeführt =========
1.

curl -XPOST https://someClusterURL/tax2 -d '{ 
    "mappings": { 
    "ids": { 
     "properties": { 
     "somerecord": { 
      "type": "nested", 
      "properties": { 
      "fieldValue": { 
       "type": "string" 
      } 
      } 
     } 
     } 
    } 
    } 
}' 
  1. curl -XPUT https://someClusterURL/tax2/ids/1 -d '{ 
        "somerecord": [ 
        { 
         "fieldValue": "1", 
         "sampleKey": [ 
         "1", 
         "2" 
         ] 
        }, 
        { 
         "fieldValue": "2", 
         "sampleKey": [ 
         "3", 
         "4" 
         ] 
        } 
        ] 
    }' 
    
  2. 3.
curl -XGET https://someClusterURL/tax2/ids/_search -d '{ 
    "query": { 
    "nested": { 
     "path": "somerecord", 
     "query": { 
     "bool": { 
      "must": [ 
      { "match": { "fieldValue": "1" }} 
      ] 
     } 
     } 
    } 
    } 
}' 

Ergebnis:

{ 
    "somerecord": [ 
    { 
     "fieldValue": "1", 
     "sampleKey": [ 
     "1", 
     "2" 
     ] 
    }, 
    { 
     "fieldValue": "2", 
     "sampleKey": [ 
     "3", 
     "4" 
     ] 
    } 
    ] 
} 

mehr versucht, aber funktionieren immer noch nicht.

Antwort

2

Verwenden Inner_Hits und Source Filtering (deaktivieren Quelle) wie:

{ 
"_source": false, 
"query": { 
"nested": { 
    "path": "somerecord", 
    "query": { 
    "bool": { 
     "must": [ 
     { "match": { "fieldValue": "1" }} 
     ] 
    } 
    }, 
    "inner_hits" :{} 
    } 
} 

Mit "_source": false wird die Quelle Details nicht holen.

+0

Danke Richa. Ich habe es versucht, habe das Sub-Element, nach dem ich suche, in inner_hits gefunden. Aber mein Problem ist hier noch nicht beendet, ich will keine vollständige Aufzeichnung. Ich habe die Optionen von inner_hits und anderen überprüft, konnte die Einstellung zum Deaktivieren des vollständigen Datensatzes nicht sehen. Lass es mich wissen, wenn es möglich ist. –

+0

@VenkataraoN Funktioniert es für Sie? – Richa

+0

Danke Richa! Es funktioniert jetzt für mich. –

0

Das Problem besteht darin, dass Sie beide Objekte in einem verschachtelten Dokument speichern. Wenn Sie einen Treffer innerhalb eines verschachtelten Objekts haben, wird das vollständige Dokument zurückgegeben.

Benötigen Sie überhaupt verschachtelte Dokumente?

+0

Eingangsdatensatz enthält eine Liste und wird in ElasticSearch gespeichert. Nach dem Abgleich sollte das innere Objekt angegeben werden. –

+0

Dann werfen Sie einen Blick auf die [innere Treffer Aggregation] (https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-inner-hits.html). Dadurch erhalten Sie das innere Objekt, das den Treffer verursacht hat. –

+0

Danke Michael. Ich habe es versucht, habe das Sub-Element, nach dem ich suche, in inner_hits gefunden. Aber wie unten auf Richas Antwort kommentiert, ist mein Problem hier nicht beendet, ich will keine vollständige Aufzeichnung. Ich habe die Optionen von inner_hits und anderen überprüft, konnte die Einstellung zum Deaktivieren des vollständigen Datensatzes nicht sehen. Lass es mich wissen, wenn es möglich ist. –

Verwandte Themen