gpt4 book ai didi

python - 模糊正则表达式 Elasticsearch

转载 作者:太空宇宙 更新时间:2023-11-04 05:46:19 25 4
gpt4 key购买 nike

我正在尝试使用 Elasticsearch 查找单词和简化形式之间的匹配项。

假设我有输入词 shmp(在 ES 中索引为 shampoo),我生成以下正则表达式 s.*?h.*?m .*?p.*? 并执行以下查询 DSL:

{
"query": {
"regexp": { "name": "s.*?h.*?m.*?p.*?" }
}
}

有没有办法同时进行模糊搜索(例如 max_expansions 1)以便 s.*h.*?n.*?p.*? 匹配?

但是我不确定这是最好的方法,也许有一些我没有想到的解决方法。

最佳答案

此解决方案与@ezig 的答案不同。不同的看法:p

^(.*?([^s](?=.*?h.*?m.*?p)|s).*?([^h](?=.*?m.*?p)|h).*?([^m](?=.*?p)|m).*?.)

Regex101

这个正则表达式的基本工作方式是每个字母都有一个部分。对于这个解释,我们将使用 s,因为它是第一个。

S: ([^s](?=.*?h.*?m.*?p)|s)

这表示 “假设字符串的其余部分将正确匹配,您可以不匹配此处的 s,否则我们需要匹配 s这里”

要了解为什么这个正则表达式比@ezig 的答案增长得更慢,我们知道第一个字符将遵循模糊匹配的规则,我们不必对其他字符太聪明。

H: ([^h](?=.*?m.*?p)|h)

该部分被缩短了,因为我们知道如果 s 不匹配,我们根本不会匹配该字符串,但是因为我们在这里检查 h 并且它可能会有所不同,我们知道它之前必须匹配 s。这表示 “如果字符串的其余部分匹配正确,那么我们可以匹配 h 以外的内容”

关于python - 模糊正则表达式 Elasticsearch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32142535/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com