ElasticSearch:使用模糊匹配的替代方案来支持模糊搜索

3
我的文档有一个“描述”字段,包含3到10个句子。
我必须支持模糊搜索,因为我不能期望用户使用完全相同的单词。
另一方面,我必须使用“match_phrase”而不是“match”,因为如果单词距离太远,文档就不相关了。
问题在于,“match_phrase”不分析单词,因此不支持模糊匹配。(请参见这里的最后一段 https://www.elastic.co/guide/en/elasticsearch/guide/master/phrase-matching.html)。
我想我需要一个创造性的解决方案来满足这两个要求。也许可以使用其他搜索查询。
1个回答

1

经过一番对“span”查询的挖掘,发现可以通过使用“span_near”与“span_multi”来实现上述两个请求。

以下是在“描述”字段中搜索“hello world”的示例。

{
    "span_near": {
        "clauses": [{
            "span_multi": {
                "match": {
                    "fuzzy": {
                        "description": {
                            "value": "hello"
                        }
                    }
                }
            }
        }, {
            "span_multi": {
                "match": {
                    "fuzzy": {
                        "description": {
                            "value": "world"
                        }
                    }
                }
            }
        }],
        "slop": 2,
        "in_order": false,
        "collect_payloads": false
    }
},

不错!你成功地让查询中的一些单词变成了可选项吗? 也就是说,查询中缺少一个或两个单词,但仍然被视为匹配。我尝试使用“slop”进行调整,但我仍然不确定它如何影响结果。 - OoDeLally

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接