2017-03-24 59 views
0

我使用ElasticSearch 5.2任何結果的值過濾與標籤關鍵項包含一個點不回

我的查詢是:

POST /_search 
{ 
    "query": { 
    "bool": { 
     "filter": [ 
     { "term": { "tag": "server-dev.user-log" }} 
     ] 
    } 
    } 
} 

我可以像abcd標記值過濾但似乎我不能用ab.cd

我想這是因爲Tokenizer。有沒有像嚴格等價的說法?或者如果它來自.以逃脫它?

標籤映射:

"tag": { 
    "type": "text", 
    "fields": { 
    "keyword": { 
     "type": "keyword", 
     "ignore_above": 256 
    } 
    } 
}, 
+0

您是否在索引上設置了映射? – nikoshr

+0

你能顯示你的模式設置和映射嗎? – user3775217

回答

0

最後,我已經能夠使它發揮作用,如:

POST /_search 
{ 
    "query": { 
    "bool": { 
     "filter": [ 
     { "terms": { "tag": ["server", "dev.user", "log"] }} 
     ] 
    } 
    } 
} 

看來-是令牌的分隔符

我只想補充一點,我的配置非常標準。我沒有修改映射。該映射是由fluentd創建的。

=======>編輯< =======

如果通過tag.keyword更換tag你不需要做上述方案了(順便說一句,其不與任何工作值)

POST /_search 
{ 
    "query": { 
    "bool": { 
     "filter": [ 
     { "term": { "tag.keyword": "server-dev.user-log" }} 
     ] 
    } 
    } 
} 
1

最有可能你有一個Standard analyzer爲您現場標籤和令牌server-dev.user-log,下列標記將提供:

{ 
    "tokens": [ 
     { 
      "token": "server", 
      "start_offset": 0, 
      "end_offset": 6, 
      "type": "<ALPHANUM>", 
      "position": 0 
     }, 
     { 
      "token": "dev.user", 
      "start_offset": 7, 
      "end_offset": 15, 
      "type": "<ALPHANUM>", 
      "position": 1 
     }, 
     { 
      "token": "log", 
      "start_offset": 16, 
      "end_offset": 19, 
      "type": "<ALPHANUM>", 
      "position": 2 
     } 
    ] 
} 

和,這就是原因,你沒有匹配,所以應該修復它的東西是添加mapping作爲字段標記,使用標記器將保存整個標記。最簡單的選擇是KeywordAnalyzer,與這樣的指標設置:

{ 
     "settings": { 
     "analysis": { 
      "analyzer": { 
      "my_analyzer": { 
       "tokenizer": "my_tokenizer" 
      } 
      }, 
      "tokenizer": { 
      "my_tokenizer": { 
       "type": "keyword" 
      } 
      } 
     } 
     }, 
     "mappings": { 
     "my_type": { 
      "properties": { 
      "text": { 
       "type": "tag", 
       "analyzer": "my_analyzer" 
      } 
      } 
     } 
     } 
    } 
+0

我用'tag'映射更新了帖子,它似乎已經是'keyword'類型了 – samidarko