[英]Exclude a field on a Elasticsearch query
具有以下映射:
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 6.0.0
您可以將"include_in_all": false
為您的索引字段屬性,例如參見https://www.elastic.co/guide/en/elasticsearch/reference/5.5/include-in-all.html 。
(這當然需要重新索引數據。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.