排除Elasticsearch查询中的字段

具有以下映射:

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,所以我要做的是:

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

回答:

_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"]

}

}'

以上是 排除Elasticsearch查询中的字段 的全部内容, 来源链接: utcz.com/qa/418931.html

回到顶部