2016-09-12 2 views
0

mit der folgenden Abbildung:ein Feld auf einem Elasticsearch Abfrage

curl -XPUT 'localhost:9200/testidx?pretty=true' -d '{ 
    "mappings": { 
    "items": { 
     "dynamic": "strict", 
     "properties" : { 
      "title" : { "type": "string" }, 
      "body" : { "type": "string" } 
}}}}' 

Ich habe zwei Gegenstände darauf:

curl -XPUT 'localhost:9200/testidx/items/1' -d '{ 
    "title": "Titulo anterior", 
    "body": "blablabla blablabla blablabla blablabla blablabla blablabla" 
}' 

curl -XPUT 'localhost:9200/testidx/items/2' -d '{ 
    "title": "Joselr", 
    "body": "Titulo stuff more stuff" 
}' 

Jetzt möchte ich das Wort suchen titulo auf jedem Feld aber body, so was ich tue, ist (nach this post):

curl -XGET 'localhost:9200/testidx/items/_search?pretty=true' -d '{ 
    "query" : { 
     "query_string": { 
       "query": "Titulo" 
     }}, 
     "_source" : { 
       "exclude" : ["*.body"] 
     } 
    }' 

Es s soll nur das 1 Element zeigen, als das zweite hat das Wort Titulo, aber es ist auf dem body und das ist, was ich ignorieren möchte. Wie kann das archiviert werden?

PS: Dies ist nur ein einfaches Beispiel, ich habe eine Zuordnung mit vielen Eigenschaften und ich möchte einige von ihnen in einigen Suchen ignorieren.
PS2: Ich verwende ES 2.3.2

+0

https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-source-filtering.html&rqid=iKqKTO4D&geid=lo – blackmamba

+0

Das habe ich ausprobiert. Lies zuerst meine Frage. –

Antwort

1

Das ist _source/exclude Einstellung nur nützlich für nicht Rückgabe des body Feld in der Antwort, aber das dieses Feld nicht ausschließen gesucht.

Was Sie tun können, ist es, alle Felder angeben Sie stattdessen (Whitelist-Ansatz)

curl -XGET 'localhost:9200/testidx/items/_search?pretty=true' -d '{ 
    "query" : { 
    "query_string": { 
      "fields": ["title", "field2", "field3"],  <-- add this 
      "query": "Titulo" 
    }}, 
    "_source" : { 
      "exclude" : ["*.body"] 
    } 
}' 

Eine andere Sache, die Sie tun, um suchen möchten, können explizit angeben, dass body sollte nicht mit -body:Titulo

angepasst werden
curl -XGET 'localhost:9200/testidx/items/_search?pretty=true' -d '{ 
    "query" : { 
    "query_string": { 
      "query": "Titulo AND -body:Titulo"    <-- modify this 
    }}, 
    "_source" : { 
      "exclude" : ["*.body"] 
    } 
}' 
+0

Danke, Val. Ich suche nach etwas wie der zweiten Antwort. Der erste muss die anderen Felder auflisten und das möchte ich vermeiden. Die zweite Antwort scheint mit einem 'query_string 'gültig zu sein, aber wie kann ich die Abfrage machen, wenn ich' term' oder 'terms' verwende? Wenn ich nicht falsch liege, ist dieser "Körper", um ein Feld auszuschließen, nur in query_string verfügbar, richtig? –

Verwandte Themen