ElasticSearch:使用match_phrase支持模糊性的替代方法

时间:2016-11-28 22:00:50

标签: elasticsearch fuzzy-search match-phrase

我的文档有一个'description'字段,包含3到10个句子。

我必须支持模糊,因为我不能指望用户使用完全相同的单词。

另一方面,我必须使用“match_phrase”而不是“匹配”,因为如果这些单词彼此相距太远,则该文档不相关。

问题是“match_phrase”不会分析单词,因此它不支持模糊性。 (见https://www.elastic.co/guide/en/elasticsearch/guide/master/phrase-matching.html的最后一段)。

我想我需要一个创造性的解决方案,以某种方式实现这两个要求。也许通过使用其他搜索查询。

1 个答案:

答案 0 :(得分:0)

在对'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
    }
},