代码之家  ›  专栏  ›  技术社区  ›  I lebzdel I

如果文本字段包含日期,如何添加模糊性

  •  0
  • I lebzdel I  · 技术社区  · 1 年前

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

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

    它不起作用。如果我把日期改为1939-05-17,结果保持不变。即使我试过1939年5月17日。

    这很奇怪,但对于其他文本类型字段,模糊性是正确的。

    如果输入是1939-02-22或1939-03-21,我希望弹性能找到正确的日期(例如1939-02-21)。但不是1939-03-22。

    0 回复  |  直到 1 年前
        1
  •  0
  •   Musab Dogan    1 年前

    Elasticsearch测量相似性 介于两个文本字符串之间 具有 Levenshtein distance 在期间 fuzzy query .

    在信息论、语言学和计算机科学中 Levenstein距离是用于测量差值的字符串度量 在两个序列之间。

    即使您将日期索引为字符串,也无法测量数字、特殊字符或除字母表以外的任何字符之间的相似性。例如,你可以测量之间的相似性 "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
          }
        }
      }
    }