具有以下映射:
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
,所以我所做的是(this帖子之后):
curl -XGET 'localhost:9200/testidx/items/_search?pretty=true' -d '{
"query" : {
"query_string": {
"query": "Titulo"
}},
"_source" : {
"exclude" : ["*.body"]
}
}'
它应该只显示1
项目,因为第二个项目有Titulo
,但它位于body
上,这就是我想要忽略的内容。如何存档?
PS:这只是一个简单的例子,我有很多属性的映射,我想在一些搜索中忽略其中的一些。
PS2:我正在使用ES 2.3.2
答案 0 :(得分:2)
_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"]
}
}'
答案 1 :(得分:0)
最多elasticsearch 6.0.0
可以将"include_in_all": false
设置为索引字段属性,例如https://www.elastic.co/guide/en/elasticsearch/reference/5.5/include-in-all.html。
(这当然需要对数据进行重新索引。)