elasticsearch 如果文本字段包含日期,如何将future添加到文本字段

ep6jt1vc  于 5个月前  发布在  ElasticSearch
关注(0)|答案(1)|浏览(68)

我有一个包含日期(格式2023-12-25)的字段,但其文本类型。我需要做一个可能的错字日期搜索。尝试这样做

POST _msearch/
{"index" : "some_index"}
{"query": {"bool" : {"must" : [{"match": {"birthDate": {"query": "1939-02-21", "fuzziness": 1}}}]}}}

字符串
如果我把日期改为1939-05-17,结果还是一样。即使我试着输入17-05-1939。
这很奇怪,但对于其他文本类型的字段,future可以正常工作。
如果输入是1939-02-22或1939-03-21,我希望elastic能找到正确的日期(例如,1939- 02-21),但不能找到1939-03-22。

svgewumm

svgewumm1#

Elasticsearch在fuzzy query期间使用Levenshtein distance度量两个文本字符串之间的相似度**。
在信息论、语言学和计算机科学中,Levenshtein距离(英语:Levenshtein distance)是一种字符串度量,用于测量两个序列之间的差异。
即使你把日期作为一个字符串索引,你也不能测量数字,特殊字符或字母表以外的任何东西之间的相似性。例如,你可以测量"shark" and "shard"之间的相似性,但NOT"1" and "2""*" and "#"。所以你也不能测量日期之间的相似性。
也许,你可以使用range query与一些动态值。

GET /_search
{
  "query": {
    "range": {
      "timestamp": {
        "gte": "now-30d/d",
        "lte": "now/d".  <-- your filter here
      }
    }
  }
}

字符串

相关问题