在ElasticSearch中使用多种词干语言

时间:2012-06-14 22:16:57

标签: lucene elasticsearch stemming snowball

我正在为一个网站构建一个搜索引擎,用户可以在许多不同的国家/地区发布文字内容。

我会考虑: - 法语生成法语和英语的内容 - 德语生成德语和英语的内容 等...

我想知道是否可以同时使用不同的雪球词干进行搜索,以便我们在同一时间获得适当的结果。

我们是否必须为每个雪球限制器语言创建一个索引?

这种情况是否有已知的模式?

由于

5 个答案:

答案 0 :(得分:2)

如此快速的免责声明,我不是干细胞/语言形态学的专家,但由于没有其他人回应,这是我的理解。此外,我的大多数经验都与solr一致。

为了能够使用单个混合结果集查询多种语言,您需要使用多语言词干分析器。我不确定弹性纤维有什么用。

尝试将针对单一语言设计的多个词干分析器应用于单个索引将逐步踩到彼此的脚趾,并且可能不会产生预期结果(词根规则因语言而异)。

每个语言的索引具有相应的词干分析器,适用于具有单一语言结果的查询。尝试将来自多个查询的结果与多个索引相结合通常是相当成问题的(您必须尝试规范化相关性并处理分页)。

答案 1 :(得分:2)

您可以创建2个单独的索引并同时搜索两个(或全部)索引。只要索引的字段相同,您就会得到有效的结果。

答案 2 :(得分:2)

elasticsearch团队的今年早些时候 Kiju Kim 在elastic.co博客上发表了一些有关如何使用多种语言的很好的文章:

您基本上可以将多个字段用于内容-一个您要支持的每种语言(第二部分)-每个都使用特定于语言的 analyzers (第一部分)。 (第3部分)添加了一些优化,以使用语言检测来填充正确的语言字段,而不是使用摄取管道(使用ingest plugin for language detection)填充所有语言字段。

答案 3 :(得分:1)

这个新的ElasticSearch插件工作正常:

https://github.com/yakaz/elasticsearch-analysis-combo

答案 4 :(得分:0)

您可以组合茎干。我认为会有冲突,秩序很重要。想知道问题有多严重。

"settings": {
    "index": {
        "analysis": {
            "filter": {
                "german_stemmer": {
                    "type": "stemmer",
                    "name": "light_german"
                },
                "english_stemmer": {
                    "type": "stemmer",
                    "name": "english"
                },
                "french_stemmer": {
                    "type": "stemmer",
                    "name": "light_french"
                },
                "italian_stemmer": {
                    "type": "stemmer",
                    "name": "light_italian"
                }
            }
            "analyzer": {
                "asdfghjkl": {
                    "tokenizer": "standard",
                    "filter": [
                        "english_stemmer",
                        "italian_stemmer",
                        "french_stemmer",
                        "german_stemmer"
                    ]
                }
            }
        }
    }
}