使用带有包含点的值的标记键上的term进行过滤不会返回任何结果

时间:2017-03-24 09:42:48

标签: elasticsearch

我正在使用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
    }
  }
},

2 个答案:

答案 0 :(得分: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,使用将保留整个令牌的tokenizer。最简单的选择是KeywordAnalyzer,其中包含如下索引的设置:

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

答案 1 :(得分:0)

最后,我能够让它像以下一样工作:

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

似乎-是一个标记分隔符

我只想补充说我的配置非常标准。我没有修改映射。映射由流利的。

创建

=======&GT;编辑&lt; =======

如果您将tag替换为tag.keyword,则不再需要执行上述解决方案(btw不能使用任何值)

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