2017-02-14 40 views
0

我使用的基本elasticsearch庫在Python 3如何逃生連字符在Python elasticsearch

我有一個查詢:

query = { 
     "query": { 
      "bool": { 
       "must": [{ "term": {"hostname": '"hal-pc"' } }] 
      } 
     } 
    } 

,我稱之爲有: page = es.search(index = index_name, body=query, search_type='scan', scroll='2m')

但是我沒有得到任何結果。我可以查詢其他字段,所以我知道我的查詢工作,但是當我添加一個連字符的值的字段搜索時,我找不到任何東西。我如何逃避這個角色?我知道,在正常的ES查詢中,您可以發送一條消息來配置您的ES以特定方式響應某些字符,但我不知道如何在python中執行此操作。

+0

是否在elasticsearch映射中分析了字段'hostname'? –

+0

我不知道這意味着什麼 - 我不維護ES。如果有幫助,我可以訪問kibana,並將其顯示爲文本字段。 –

回答

1

如果在映射中分析字段hostname,elasticsearch不會按原樣存儲字段值。相反,它將「hal-pc」存儲爲兩個單獨的術語:「hal」和「pc」。因此,使用term過濾器搜索「hal-pc」時可能無法獲得文檔。

您可以使用Match查詢來搜索「hal-pc」以獲得必要的結果。或者,通過使字段hostname未被分析並使用term查詢。

{ 
    "query": { 
     "match" : { 
      "hostname": "hal-pc" 
     } 
    } 
} 

但是,這也可能返回docs,其中hostname只是「hal」或只是「pc」。

+0

我對ES不夠熟悉,無法理解你的答案。你能提供一個示例'Match'查詢嗎?我如何讓這個領域不被​​分析? –

+0

感謝您的編輯。如果我有幾個主機名像「hal-pc」,「abc-pc」,「foo-pc」,這隻會給我「hal-pc」的權利?我可以通過使用'{「query」:{「bool」:{stuff},「match」:{stuff in your post}}}右邊的其他'bool'查詢來結合這一點。 –

+0

看看這個:https://www.elastic.co/guide/en/elasticsearch/guide/current/_finding_exact_values.html#_term_query_with_text –