我正在进行多语言搜索。我将使用lucene作为工具来完成它。
我已经翻译了内容,每个文档将有3或4种语言。
对于索引和搜索,可能有4种策略,对于每个文档/内容:
但是我还没有测试过每一个方法,有没有人可以告诉我哪一个是更好的方式来进行多语种搜索?
谢谢!
答案 0 :(得分:2)
尽管问题已在几年前提出过,但这仍然是一个很好的问题。
有几个方面需要考虑评估不同的解决方案方法:
如果(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)会使您的搜索查询变得非常复杂,除非您希望用户能够使用任何语言进行搜索而不先选择它。