使用Solr索引多种语言

时间:2011-04-05 09:35:36

标签: java lucene solr

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

  1. 为其定义不同的架构字段 每种语言,即title_en, title_fr,......应用不同的 过滤到每种语言然后查询 带有一个标题字段之一 相应的语言。
  2. 创建 不同的Solr核心来处理每个 语言和我们的应用程序查询 正确的Solr核心。
  3. 哪一个更好?有什么起伏?

    由于

3 个答案:

答案 0 :(得分:9)

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

此方法的缺点是您无法使用lemmatisationstemming等语言特定功能。

  

为每种语言定义不同的架构字段,例如title_en,title_fr,...对每种语言应用不同的过滤器,然后使用相应的语言查询其中一个标题字段。

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

  

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

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

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

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

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

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