【问题标题】:How to find numbers with comma in Elasticsearch?如何在 Elasticsearch 中查找带逗号的数字?
【发布时间】:2019-02-21 19:48:53
【问题描述】:

如下数据查询号没有结果,但是逗号后面的空格可以找到。

样本数据:

{
  "data":"34543,2525,5674,879"
}

查询:

"query": {
  "query_string" : {
    "query" : "(data:2525)"
   }
}

设置:

"analysis":{  
   "filter":{  
      "my_ascii_folding":{  
         "type":"asciifolding",
         "preserve_original":"true"
      }
   },
   "analyzer":{  
      "default":{  
         "filter":[  
            "lowercase",
            "my_ascii_folding"
         ],
         "char_filter":[  
            "html_strip"
         ],
         "tokenizer":"standard"
      }
   }
}

例如在"34543, 2525, 5674, 879" 中查询2525 找到了,但是用"34543,2525,5674,879" 没有找到。

【问题讨论】:

  • 您的字段是如何分析的?
  • 我加了,tokenizer是标准的

标签: elasticsearch elasticsearch-dsl elasticsearch-query


【解决方案1】:

如果没有更多信息,您可能正在使用标准标记器。您可以使用

展示如何分析您的令牌
GET users/_analyze
{
  "text": "34543, 2525, 5674, 879"
}

GET users/_analyze
{
  "text": "34543,2525,5674,879"
}

如果您使用标准标记器,则 34543,2525,5674,879 只是倒排索引中的一个标记。当您搜索 2525 时,它将与该令牌不匹配。另一方面,3453、2525、5674、879 被标记为四个不带逗号的标记。 2525 匹配第二个令牌。

如果你想解决这个问题,你需要使用一个不同的标记器,它总是在逗号上标记,而不是仅仅在标记 Indexing a comma-separated value field in Elastic Search 的开头或结尾时标记。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-09
  • 2016-04-24
  • 2014-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多