具有以下映射:
curl -XPUT 'localhost:9200/testidx?pretty=true' -d '{ "mappings": { "items": { "dynamic": "strict", "properties" : { "title" : { "type": "string" }, "body" : { "type": "string" } }}}}'
我在上面放了两个项目:
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,所以我要做的是:
titulo
body
curl -XGET 'localhost:9200/testidx/items/_search?pretty=true' -d '{ "query" : { "query_string": { "query": "Titulo" }}, "_source" : { "exclude" : ["*.body"] } }'
它应该只显示该1项目,因为第二个项目带有单词,Titulo但是它在上body,这就是我要忽略的内容。如何存档?
1
Titulo
PS:这只是一个简单的示例,我有一个包含很多属性的映射,我想在某些搜索中忽略其中的一些属性。 PS2:我正在使用ES 2.3.2
该_source/exclude设置仅在不返回body响应中的字段时才有用,但这并不排除搜索该字段。
_source/exclude
您可以做的是改为指定要搜索的所有字段(白名单方法)
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
-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"] } }'