簡體   English   中英

排除 Elasticsearch 查詢中的字段

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM