bay*_*lee 7 lucene indexing multilingual search full-text-search
我正在进行多语种搜索.我将使用lucene作为工具来完成它.
我已经翻译了内容,每个文档将有3或4种语言.
对于索引和搜索,可能有4种策略,对于每个文档/内容:
但是我还没有测试过每一种方式,有没有人可以告诉我哪一个是更好的方式来进行多语种搜索?
谢谢!
尽管这个问题已经在几年前提出,但这仍然是一个很好的问题。
评估不同的解决方案需要考虑几个方面:
如果 (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)
Run Code Online (Sandbox Code Playgroud)
多领域(策略 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
Run Code Online (Sandbox Code Playgroud)
多重指数(策略 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
Run Code Online (Sandbox Code Playgroud)
独立于单个或多个字段方法,如果您将内容索引为多个文档,您的解决方案可能需要处理“错误”语言匹配的结果折叠。一种方法可能是添加语言字段和过滤器。
建议:您选择的方法/策略取决于项目要求。只要有可能,我都会选择多字段或多索引方法。
简而言之,这取决于您的需求,但我会选择选项 3 或 1。
1)如果语言之间根本没有重叠/共享字段,这可能是最好的方法。
3) 如果有多个字段需要跨语言共享,那么这将是一种可行的方法,因为这可以节省磁盘空间并允许更大的索引部分放入文件系统缓存中
我不推荐 2):这会使您的搜索查询更加复杂,并迫使 lucene 考虑更多文档。
4) 将使您的搜索查询变得非常复杂,除非您希望用户能够在不先选择的情况下以任何语言进行搜索。