Lucene多语言文本字段

Lucene多语言文本字段,lucene,multilingual,hibernate-search,Lucene,Multilingual,Hibernate Search,我已经研究了这个问题,它证实了我的一些怀疑 我有一个实体,其中有许多我希望索引的字段。其中一个字段可以是几种语言中的一种,我需要为每种语言使用不同的分析器 我最好将其实现为同一索引中的不同字段,还是每种语言的不同索引 我猜想,折衷是在运行多个索引的开销和将单个索引弄得杂乱无章之间进行的 感谢您的建议。还有一个您没有提到的想法:您可以将每种语言设置为非存储、非索引字段。然后,您可以将所有(分析的)数据复制到单个存储+索引字段,它的行为就像您在搜索单个字段一样。(这类似于Solr的“复制字段”——我

我已经研究了这个问题,它证实了我的一些怀疑

我有一个实体,其中有许多我希望索引的字段。其中一个字段可以是几种语言中的一种,我需要为每种语言使用不同的分析器

我最好将其实现为同一索引中的不同字段,还是每种语言的不同索引

我猜想,折衷是在运行多个索引的开销和将单个索引弄得杂乱无章之间进行的


感谢您的建议。

还有一个您没有提到的想法:您可以将每种语言设置为非存储、非索引字段。然后,您可以将所有(分析的)数据复制到单个存储+索引字段,它的行为就像您在搜索单个字段一样。(这类似于Solr的“复制字段”——我不确定在hibernate中这样做有多难。)

如果将它们保存在单独的索引中,您应该注意,您将无法轻松地跨语言搜索(或者,可以说,根本无法)。因此,如果您想允许像“english:foo dutch:foo”这样的查询,您需要将它们放在同一个索引中


从性能的角度来看,这将取决于共享了多少数据。如果文档是不相交的(即没有文档包含两种语言),那么在一个索引和两个索引中可能不会有太大区别。他们共享的数据越多,Lucene复制的内存就越多,因此最好有一个索引。我的猜测是,这只是一个问题,如果你有很多存储的数据,但YMMV。

你会需要同时搜索多种语言吗?如果是这样的话,你就不能使用多个索引。我应该永远不需要执行多语言搜索。从我的角度来看,问题是:如果我有一个名为
Description
的字段,它可以是语言
a
B
,它们都使用不同的分析器,如果我对字段运行两个分析器来创建
DescriptionA
DescriptionB
,那么无论哪种语言没有被使用,我最终都会得到标记化很差的索引。@Finbarr:那么您试图解决的问题是“如何识别文本所使用的语言?”