2017-03-31 2 views
1

Ich benutze elasticsearch 5.2.2.keine Treffer in Array in elasticsearch

in meinem Index Ich habe Daten wie folgt aussehen:

{ 
    "_index": "index", 
    "_type": "273caf76-ec03-478c-b980-9743180bc863", 
    "_id": "eee46e24-f383-4ae7-8930-dc3836e030a5", 
    "_score": 3.41408, 
    "_source": { 
     "Father Name": [ 
     { 
      "id": "some id", 
      "value": "Some value test test" 
     } 
     ], 
     "Mother Name": [ 
     { 
      "id": "some id", 
      "value": "Another value haha" 
     } 
     ], 
     "Other values": [{ id: "", value: ""}] 
    } 
} 

Wenn ich mit _all bin auf der Suche, funktioniert alles einwandfrei und ich kann alle Ergebnisse mit vertretbarem Partituren

{"query":{"match":{"_all":"value"}},"from":0,"size":20} 

Aber das finden Abfrage sucht in allen Feldern. Wenn ich zum Beispiel nur Ergebnisse in Father Name oder in Father Name und Mother Name finden möchte, dann finde ich nichts.

Mein Ziel ist es zu finden in haben eine Suche wie mit _all, aber auf ein paar Felder beschränkt.

Antwort

2

Ihre Felder Father Name und Mother Name sind Arrays von inneren Objekten.

im value Feld innerhalb Father Name, zum Beispiel zu suchen, tun

curl -XGET localhost:9200/myindex/_search?pretty -d ' 
{ 
    "query": { 
    "match": { 
     "Father Name.value": "first" 
    } 
    }, 
    "from": 0, 
    "size": 20 
}' 

Ich bin nicht sicher, aber, wie für alle Bereiche innerhalb Father Name abzufragen.

Referenz Arrays of Inner Objects

0

Antwort Sam Shen ist der Weg zu gehen, wenn Sie auf einer Basis pro-Abfrage, welche Eigenschaften konfigurieren müssen, um zu verwenden.

Eine Alternative besteht darin, die Felder so zu konfigurieren, dass sie nicht in die Abfrage _all aufgenommen werden.

Zum Beispiel würde dies dazu führen, Father Name nur in der _all Abfrage aufgenommen werden, indem Sie alle Felder auf der Typebene zu deaktivieren, dann werden alle der Subfelder auf Father Name ermöglicht.

PUT index 
{ 
    "mappings": { 
    "type": { 
     "include_in_all": false, 
     "properties": { 
     "Father Name" : { 
      "include_in_all": true 
     } 
     } 
    } 
} 

Sie können die include_in_all Eigenschaft auf jeder Ebene in der Mapping-Set, einschließlich Teilfeld Eigenschaften.

Der große Nachteil hier ist, dass dies nicht für jede Abfrage konfiguriert ist. Dies ist für alle Abfragen konfiguriert, die versuchen, das Feld _all zu verwenden.

Verwandte Themen