使用Solr索引多种语言

我们正在建立一个Solr来索引文档,其中title字段可以是各种语言。 谷歌搜索后,我发现了两个选项:

  1. 为每种语言定义不同的模式字段,即title_en,title_fr,…对每种语言应用不同的filter,然后使用相应的语言查询其中一个标题字段。
  2. 创建不同的Solr核心来处理每种语言并使我们的应用程序查询正确的Solr核心。

哪一个更好? 有什么起伏?

谢谢

还有第三种方法,您可以为所有语言使用一组通用字段,但将filter应用于字段language 。 例如,如果您有字段textlanguage您可以将所有语言的文本内容放入text字段,并使用例如fq=language:english来仅检索英文文档。

这种方法的缺点是你不能使用语言特定的function,如lemmatisationstemming等。

为每种语言定义不同的模式字段,即title_en,title_fr,…对每种语言应用不同的filter,然后使用相应的语言查询其中一个标题字段。

这种方法具有很好的灵活性,但在存在多种语言时要注意高内存消耗和复杂性。 这可以使用多个solr服务器来缓解。

创建不同的Solr核心来处理每种语言并使我们的应用程序查询正确的Solr核心。

绝对是一个很好的解决方案。 但是,单独的管理和轻微的开销是否对您有用可能与您希望使用的语言数量有关。

除非第一种方法适用,否则我可能倾向于第二种方法,除非不需要核心的可扩展性。 这两种方法都很好,我认为它基本上归结为偏好。

这一切都取决于您的要求。 我假设您不需要在单个查询中查询多种语言。 在这种情况下,将它们分成多个核心将是一个更好的主意,因为您可以在不影响其他核心和索引的情况下调整该核心。 使用多种语言会有一些调整或其他涉及由于词干,拼写检查和其他function(如果您打算使用它们)。

servlet容器中还有一个多个solr webapps选项。 所以这可以是你可以看到的选项。

这一切都取决于您在解决任何问题时可以采取的停机方面的灵活性。

  • 如果您使用多个核心并且需要分片,我可以看到的问题之一是:

你需要对每种语言(核心)进行分片。 您将无法立即对整个索引进行分片。

  • 如果您使用单个核心,可能会丢失文本列“未满”的空间,但不确定。