2012-02-17 68 views
3

我有一个事物数据库,每个事物都可以有不同语言的多个名称。这是目前归一东西有,很多名字模式:非规范化混合语言文档的Solr语言检测更新处理器

things 
------ 
id 
... 

names 
----- 
id 
thing_id 
language 
name 

我这个索引使用Solr的,我试图找出非规范化成为Lucene的模式是最好的方法。这一个工作好:

<fields> 
    <field name="id" type="uuid" indexed="true" stored="true" required="true" /> 
    ... 
    <field name="name_eng" type="text_eng" indexed="true" stored="true" /> 
    <field name="name_jpn" type="text_cjk" indexed="true" stored="true" /> 
    <field name="name_kor" type="text_cjk" indexed="true" stored="true" /> 
</fields> 

的问题是,我需要指定一个字段,字段类型为支持的每种语言逐个,并有可能成为很多。由于我也使用SQL DataImportHandler,这意味着我必须复制大量代码才能指定SQL查询以将这些数据从数据库导入到此模式中。此外,名称的language字段并不总是正确的,因为它基于用户输入。

我一直在寻找language detection capabilities Solr优惠,看起来非常好。但他们似乎只对整个文档起作用,在这种情况下,我猜不会有太大的帮助。有没有一种方法可以在我可以存储名称的模式中指定一个单独的multiValued字段,其​​名称将被相应地自动检测并编入索引?或者其他语言检测设施可以让我的生活更轻松吗?

回答

0

你也许可以编写一个在索引端会这样做的变换器,但是查询端不会得到相同的分析链,所以这是行不通的。

这些“东西”的文字是什么样的?

如果少于200个字符,语言ID将无法正常工作。用统计学的方法把它看作“语言猜测”。对于少量数据,猜测是不好的。是“移动”英语还是丹麦语?两者,真的。 “Die”是英语和德语,等等。对于一个很好的猜测,一千个字符会有帮助。

文本是否有商标名? “LaserJet”和“Linux”在所有语言中都是相同的,而且很少受到影响,因此语言处理不会做任何事情。也许你可以没有语言特定的词干。

最后,你可能会考虑n-gram而不是语言处理。这是一个与语言敏感匹配完全不同的模型,但它可能对此更好。从某种意义上说,它正在进行与语言ID相同类型的统计模式匹配,但是在查询时而不是索引时。它将从查询中获取短序列模式并查找文本中的模式序列。它需要更多时间和空间,但值得一试。