弹性搜索,模糊度超过2个字符(距离)

时间:2018-12-06 13:25:48

标签: elasticsearch nest levenshtein-distance fuzzy-search

我正在尝试匹配文本字段。如果它具有60%以上的匹配率,我期望得到结果。

根据模糊性,我们只能给出 2个距离。有了这个 Elastic Db的记录描述为“ theeventsfooddrinks”,我正尝试匹配“ theeventsfooddrinks123”,但不匹配。

'theeventsfooddrinks12'=>匹配

'theeventsfooddri'=>不匹配

'321eventsfooddrinks'=>不匹配

我希望松紧带与“ eventsfooddrinks”相匹配

任何需要超过2个步骤的更改都不匹配

1 个答案:

答案 0 :(得分:1)

我认为模糊查询不适合您的情况。模糊性是解决人类在键入查询时可能产生的小错误的方法。人脑可以轻松地跳过单词中间的某些字母替换,而不会丢失短语的整体含义。我们期望搜索引擎提供类似的行为。

尝试通过 ngrams 分析器使用常规的部分处理:

    PUT my_index
    {
        "settings": {
            "analysis": {
                "filter": {
                    "trigrams_filter": {
                        "type": "ngram",
                        "min_gram": 3,
                        "max_gram": 3
                    }
                },
                "analyzer": {
                    "trigrams": {
                        "type": "custom",
                        "tokenizer": "standard",
                        "filter": [
                            "lowercase",
                            "trigrams_filter"
                        ]
                    }
                }
            }
        }, 
        "mappings": {
            "my_type": {
                "properties": {
                    "my_field": {
                        "type": "text",
                        "analyzer": "trigrams"
                    }
                }
            }
        }
    }

    GET my_index/my_type/_search
    {
        "query": {
            "match": {
                "my_field": {
                    "query": "eventsfooddrinks",
                    "minimum_should_match": "60%"
                }
            }
        }
    }