【问题标题】:Multilingual Search using lucene使用 lucene 进行多语言搜索
【发布时间】:2011-09-02 07:28:04
【问题描述】:

我正在进行多语言搜索。我会使用 lucene 作为工具来做这件事。

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

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

  1. 每种语言都在不同的索引/目录中编入索引。
  2. 每种语言都在不同的文档中编入索引,但在同一个索引中。
  3. 每种语言都在不同的字段中被索引,但在同一个文档中。
  4. 所有语言都在文档的同一个字段中编入索引

但是我还没有测试每一种方式,有经验的人可以告诉我哪一种方式是进行多语言搜索的更好方法吗?

谢谢!

【问题讨论】:

  • 顺便说一句,如果我的回答有帮助,如果你接受它或至少投赞成票会很好

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


【解决方案1】:

尽管这个问题在几年前就被问过了,但它仍然是一个很好的问题。

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

  1. 索引时是否使用特定于语言的分析器?
  2. 查询语言是否总是已知的(例如用户可选择)?
  3. 查询语言是否总是匹配“内容”语言之一?
  4. 是否应该只重新调整与查询语言匹配的内容?
  5. 相关性重要吗?

如果 (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

多重指数(策略一)


+ 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

独立于单个或多个字段方法,如果您将内容索引为多个文档,您的解决方案可能需要处理“错误”语言匹配的结果折叠。一种方法可能是添加一个语言字段并为此过滤。

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

【讨论】:

    【解决方案2】:

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

    1) 可能是最好的方法,如果语言之间根本没有重叠/共享字段。

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

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

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

    【讨论】:

    • 如果我想要用户不要选择哪种语言,而是选择所有语言。实际上我正在考虑2)。为什么 4) 很复杂?因为分析器?
    • 我以为你想让用户先选择语言。如果你不这样做,我会推荐 2) 或 4)。 2) 有一个缺点,即只要在不同语言中存在相同的单词,您就会为同一个“命中”获得多个文档。
    • 谢谢! 2)真的有那个缺点。我必须编写代码来过滤重复。请问2)和3)有什么区别?
    • 3 不会产生重复的命中,但您的查询会更复杂,因此 lucene 必须做更多的工作。但是,在实践中,只要语言数量不增加,这不太可能成为问题。
    猜你喜欢
    • 2017-04-03
    • 1970-01-01
    • 1970-01-01
    • 2014-02-16
    • 2015-11-28
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    • 2014-08-31
    相关资源
    最近更新 更多