Elasticsearch中任意顺序的模糊匹配词



我需要实现的是基于单个字段(产品名称,基本上由所有可能的过滤器值组成(来匹配文档。我知道这不是最可靠的解决方案,但我只有这一个领域可以合作。

我需要能够将搜索查询和该查询中的单词以任何顺序匹配到名称字段(名称应该包含搜索查询中的所有单词(。实际上,在这一点上,简单的match_phrase_prefix运行得很好,但缺少的是模糊性。因为我们需要的另一件事是允许用户做出一些拼写错误,并且仍然得到相关的结果。

我的问题是,有没有任何方法可以进行match_phrase_prefix-like查询,但带有模糊性?

我尝试了一些带有match的嵌套布尔查询,但通过这种方式我没有得到任何接近match_phrase_prefix的结果。

我尝试的例子:

相当好的结果,但没有模糊性:

{
"query": {
"bool": {
"must": [
{
"match_phrase_prefix": {
"name.standard": {
"query": "brand thing model",
"slop": 10
}
}
}
]
}
}
}

模糊,但匹配非常有限:

{
"query": {
"bool": {
"must": [
{
"match": {
"name.standard": {
"query": "thing",
"fuzziness": "AUTO",
"prefix_length": 3
}
}
},
{
"match": {
"name.standard": {
"query": "brand",
"fuzziness": "AUTO",
"prefix_length": 3
}
}
}
]
}
}
}

使用上面的should,我得到了更多的结果,但它们的相关性远不如第一个查询中的结果。

以上可以通过简单的匹配查询实现

{
"query": {
"match": {
"name.standard": {
"query": "brand thing model",
"operator": "and" ,//It means all of above 3 tokens must be present in any order
"fuzziness": "AUTO" // value as per your choice
}
}
}
}

最新更新