Elasticsearch索引短词+使索引应用EdgeNGram

时间:2015-03-04 18:23:10

标签: search elasticsearch search-engine

我正在使用带有EdgeNGram过滤器的Elasticsearch,其设置如下:

"edgeNGram": {
    "type": "edgeNGram",
    "min_gram": 3,
    "max_gram": 15,
},

问题在于,当我使用非常短的单词进行查询时,它们在搜索中被完全省略。假设我输入“维生素C” - >这给了我第一个词“维生素”的结果。有什么方法可以告诉Elasticsearch在索引最多3个字符的单词时不使用EdgeNGram过滤器吗?

谢谢。

修改

这些是我的设置:

ELASTICSEARCH_INDEX_SETTINGS = {
    "settings": {
        "analysis": {
            "analyzer": {
                "sk_hunspell": {
                    "type": "custom",
                    "tokenizer": "standard",
                    "filter": [
                        "sk_lowercase", "sk_SK", "stopwords_SK",
                        "edgeNGram", "asciifolding",
                        "remove_duplicities",
                    ]
                },
            },
            "filter": {
                "sk_SK": {
                    "type": "hunspell",
                    "locale": "sk_SK",
                    "dedup": True,
                    "recursion_level": 0,
                    "ignore_case": True,
                },
                "sk_lowercase": {
                    "type": "lowercase",
                },
                "stopwords_SK": {
                    "type": "stop",
                    "stopwords": STOPWORDS_SK,
                },
                "remove_duplicities": {
                    "type": "unique",
                    "only_on_same_position": True
                },
                "edgeNGram": {
                    "type": "edgeNGram",
                    "min_gram": 3,
                    "max_gram": 15,
                    "token_chars": ["letter", "digit"],
                },
            },
        }
    }
}

在数据库中,我存储有关维生素,矿物质和药用植物的信息。 (他们的使用,收集,开花,健康益处等)信息以斯洛伐克语撰写。 (植物和矿物的名称也以捷克语和拉丁语存储)。

1 个答案:

答案 0 :(得分:0)

这个想法可能是一个黑客,但你可以用一个特殊的字符填充小于3的单词,然后将它们插入到索引中,这样它们就是长度为3.

当您接受用户的查询时,您还必须使用相同的特殊字符填充少于三个的单词。

您需要为此创建自定义标记生成器。