2016-09-12 9 views
0

をフィールドを除外:は、以下のマッピング持つElasticsearchクエリに

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

を私は上の2つのアイテムを置く:

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" 
}' 

は今、私はすべてのフィールドに単語tituloを検索したいけどbody、私は何をしているのですか(this投稿に続く):

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

これは、第2のものはTituloという単語を持っていますが、それはbodyにあり、それは無視したいものですから、1アイテムだけを表示するはずです。これをどのようにアーカイブできますか?

PS:これは単なる簡単な例ですが、多くのプロパティを使ったマッピングがあり、いくつかの検索ではその一部を無視したいと思います。
PS2:私は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

これは私が試みたものです。私の質問をまず読んでください。 –

答えて

1

を使用してい_source/exclude設定が対応してbodyフィールドを返さないためにのみ有用であるが、それは検索されているから、そのフィールドを除外しません。あなたは何ができるか

は、あなたが代わりに検索したいすべてのフィールド(ホワイトリストアプローチ)

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

あなたがすることができるもう一つは、明示的body-body:Titulo

と一致してはならないことを指定することですを指定することです
curl -XGET 'localhost:9200/testidx/items/_search?pretty=true' -d '{ 
    "query" : { 
    "query_string": { 
      "query": "Titulo AND -body:Titulo"    <-- modify this 
    }}, 
    "_source" : { 
      "exclude" : ["*.body"] 
    } 
}' 
+0

ありがとうございます。私は2番目の答えのようなものを探しています。最初のものは他のフィールドをリストする必要があり、それは私が避けたいものです。 2番目の答えは 'query_string'で有効と思われますが、' term'や 'terms'を使用している場合、どのようにクエリを作成できますか?私が間違っていない場合、フィールドを除外する '-body'は' query_string'でのみ利用できます。 –

関連する問題