【问题标题】:Use multiple stemming languages with ElasticSearch通过 ElasticSearch 使用多种词干提取语言
【发布时间】:2012-06-14 22:16:56
【问题描述】:

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

我会考虑: - 法语生成法语和英语内容 - 一个德国人用德语和英语生成内容 等等……

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

我们是否必须为每种雪球词干分析器语言创建一个索引?

这种情况有已知的模式吗?

谢谢

【问题讨论】:

  • 不确定我是否了解您想要的内容。您正在尝试使用单个查询搜索多种语言...并返回混合结果(多种语言的结果)?
  • 是的,在单个搜索字段中,我希望能够检索多种语言的文档(基本上是 2,用户国家语言和英语)

标签: lucene elasticsearch stemming snowball


【解决方案1】:

所以快速免责声明,我不是词干/语言形态方面的专家,但由于没有其他人回应,这是我的理解。此外,我的大部分经验都与 solr 类似。

为了能够使用单一混合结果集对多种语言进行词干查询,您需要使用多语言词干分析器。我不确定什么可用于 elastisearch。

尝试将针对单一语言设计的多个词干分析器应用于单个索引会互相影响,并且可能不会产生预期结果(词干规则因语言而异)。

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

【讨论】:

  • 谢谢。我询问了我公司的 ElasticSearch 专家,如果文档能够提供要使用的语言,我们似乎可以使用多语言词干分析器。但是对于同一个文档使用 2 个词干分析器,我还不知道。计算文档的语言并不总是那么容易,因此我想用多种语言索引同一个文档
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      这个新的 ElasticSearch 插件运行良好:

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

      【讨论】:

        【解决方案5】:

        您可以组合词干分析器。我认为会有冲突,秩序很重要。想知道这是多大的问题。

        "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"
                            ]
                        }
                    }
                }
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-02-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-10-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多