2011-03-21 60 views
0

我已经看了这个问题 - Indexing multilingual words in lucene,它证实了我的一些怀疑。Lucene多语言文本字段

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

我是否最好将其作为同一索引中的不同字段或每种语言的不同索引来实现?

我猜测这种折衷是在运行多个索引的开销和混淆单个索引的过程之间进行的。

任何意见赞赏。

+0

您是否需要同时搜索多种语言?如果是这样,你不能使用多个索引。 – Xodarap 2011-03-21 14:00:47

+0

我不应该需要执行多语言搜索。 – Finbarr 2011-03-21 20:08:29

回答

2

还有一个你没有提到的想法:你可以使每种语言都是一个非存储的非索引字段。然后,您可以将所有(分析过的)数据复制到单个存储的+索引字段中,并且其行为就像搜索单个字段一样。 (这与Solr的“复制字段”类似 - 我不确定在休眠时有多难。)

如果您将它们保留在单独的索引中,则应该注意,您将无法轻松搜索各种语言(或者可以说,完全可以)。所以,如果你想允许像“english:foo dutch:foo”这样的查询,你将需要它们在同一个索引中。

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

+0

那么从我的角度来看问题是这样的:如果我有一个名为'Description'的字段,并且它可以使用语言'A'或'B',并且它们都使用不同的分析器,如果我将两个分析器对着字段运行创建'DescriptionA'和'DescriptionB',我将以不使用任何语言的严重标记化索引结束。 – Finbarr 2011-03-21 20:11:24

+1

@Finbarr:所以你想解决的问题是“我如何识别文本所在的语言?” – Xodarap 2011-03-21 20:55:30