【问题标题】:Elasticsearch index short words + make indexes applying EdgeNGramElasticsearch索引短词+制作索引应用EdgeNGram
【发布时间】:2015-05-05 21:16:53
【问题描述】:

我正在使用 Elasticsearch 和 EdgeNGram 过滤器,该过滤器设置如下:

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

问题是当我使用非常短的单词进行查询时,它们会完全从搜索中省略。假设我输入“Vitamin C” -> 这只会给我第一个词“Vitamin”的结果。有什么方法可以告诉 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"],
                },
            },
        }
    }
}

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

【问题讨论】:

  • 不,不可能根据搜索词大小切换过滤器。但是,您可以将“Vitamin C”视为一个单词 - 即不要将空格视为分隔符。您能否添加有关您的数据以及您如何进行搜索的更多信息? EdgeNGram 可能不适合您的用例?
  • 我已经更新了我的帖子,感谢您的建议。

标签: search elasticsearch search-engine


【解决方案1】:

这个想法可能是一个 hack,但您可以在将小于 3 的单词插入索引之前用特殊字符填充它们,使其长度为 3。

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

您需要为此创建一个自定义标记器。

【讨论】:

    猜你喜欢
    • 2015-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多