2016-08-16 53 views
0

使用彈性2.3.5。有沒有辦法讓字段可過濾,但無法搜索?例如,我有一個language字段,其​​值爲en-US。在query->bool->filter->term中設置多個過濾器,我可以在不影響分數的情況下過濾結果集,例如,僅搜索language字段中具有en-US的文檔。elasticsearch - 場可篩選但不可搜索

但是,我想要一個查詢搜索術語en-US返回沒有結果,因爲這不是一個真正的搜索索引字段,但只是我可以過濾。

我可以這樣做嗎?

+1

不知道我明白這個問題。你問是否有一種方法來控制'query_string'查詢中允許的字段列表? – imotov

+1

如果該字段是「index」:「no」,並且您想對其進行過濾('「term」:{「not_indexed_field」:{「value」:「en-US」}}'它將像過濾因此,它總是**不匹配**。 –

+0

感謝您的意見和對不起,我沒有及時回覆,向他們提供了您的幫助意願 – Josh

回答

1

ElasticSearch使用_all字段允許在整個文檔上進行快速全文搜索。這就是爲什麼在所有文檔的所有字段中搜索en-US都會返回包含'語言'的文檔:'en-US'。 https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-all-field.html

您可以在映射中指定"include_in_all": false以禁用將字段包含到_all中。

PUT my_index 
{ 
    "mappings": { 
    "my_type": { 
     "properties": { 
     "title": { 
      "type": "string" 
     }, 
     "country": { 
      "type": "string" 
     }, 
     "language": { 
      "type": "string", 
      "include_in_all": false 
     } 
     } 
    } 
    } 
} 

在這個例子中,在所有領域尋找「美國」將返回包含美國冠軍或全國唯一文件。但是您仍然可以使用語言字段來過濾查詢。 https://www.elastic.co/guide/en/elasticsearch/reference/current/include-in-all.html

+0

我已將upvoted標記爲已接受,但意味着也請發表評論,感謝您花時間回答 - 這正是我所期待的。 – Josh