使用lucene进行多语言搜索

时间:2011-09-02 07:28:04

标签: search indexing lucene full-text-search multilingual

我正在进行多语言搜索。我将使用lucene作为工具来完成它。

我已经翻译了内容,每个文档将有3或4种语言。

对于索引和搜索,可能有4种策略,对于每个文档/内容:

  1. 每种语言都在不同的索引/目录中编制索引。
  2. 每种语言都在不同的文档中编入索引,但在同一索引中。
  3. 每种语言都在不同的字段中编入索引但在同一文档中。
  4. 所有语言都在文档的同一字段中编入索引
  5. 但是我还没有测试过每一个方法,有没有人可以告诉我哪一个是更好的方式来进行多语种搜索?

    谢谢!

2 个答案:

答案 0 :(得分:2)

尽管问题已在几年前提出过,但这仍然是一个很好的问题。

有几个方面需要考虑评估不同的解决方案方法:

  1. 是索引时使用的语言特定分析器吗?
  2. 是一直知道的查询语言(例如用户可选)?
  3. 查询语言是否始终与“内容”语言之一匹配?
  4. 是否应仅重新调整与查询语言匹配的内容?
  5. 是否重要?
  6. 如果(1.)& (5.)在你的项目中是有效的,你不应该考虑任何策略(重新)在同一个倒排索引中使用相同的字段用于多种语言,因为各种语言的术语频率都是混合的(与你是否索引无关)您的多语言内容作为一个文档或多个文档)。可能有趣的是,添加“n”语言特定字段不会导致“n”倍大的索引,但由于显而易见的原因,它会带来一些开销。


    单场(策略2&4)

    + only one field to query
    + scales well for additional languages
    + can distinguish/filter languages (if multiple documents, and extra language field)
    - cannot distinguish/filter languages (if single document)
    - cannot just display the queried language (if single document)
    - "wrong" term frequencies (as all languages mixed up)
    

    多个字段(策略3)

    + correct term frequencies
    + can easily restrict/filter queries for particular language(s)
    + facilitates Auto-Complete & Spellcheck / Did-You-Mean
    - more fields to index
    - more fields to query
    

    多个指数(策略1)

    + correct term frequencies
    + can easily restrict/filter queries for particular language(s)
    + facilitates Auto-Complete & Spellcheck / Did-You-Mean
    - additional languages requires all their own index
    

    如果您将内容编入多个文档,则独立于单个或多个字段的方法,您的解决方案可能需要使用“错误”语言处理匹配的结果。一种方法可能是通过添加语言字段并对其进行过滤。

    建议:您选择的方法/策略取决于项目要求。只要有可能,我会选择多个字段或多个索引方法。

答案 1 :(得分:1)

简而言之,这取决于您的需求,但我会选择3或1。

如果语言之间根本没有重叠/共享字段,那么

1)可能是最好的方法。

3)如果有多个字段需要跨语言共享,那将是一种方法,因为这样可以节省磁盘空间并允许更大的索引部分适合文件系统缓存

我不建议2):这会使您的搜索查询更加复杂,并迫使lucene考虑更多文档。

4)会使您的搜索查询变得非常复杂,除非您希望用户能够使用任何语言进行搜索而不先选择它。