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