非规范化混合语言文档的Solr语言检测更新处理器

非规范化混合语言文档的Solr语言检测更新处理器,solr,language-detection,Solr,Language Detection,我有一个事物数据库,每个事物都可以有不同语言的几个名称。这是当前规范化为具有多个名称的事物模式: 我正在使用Solr对其进行索引,并试图找出将其反规范化为Lucene模式的最佳方法。这个很好用: <fields> <field name="id" type="uuid" indexed="true" stored="true" required="true" /> ... <field name="name_eng" type="text_e

我有一个事物数据库,每个事物都可以有不同语言的几个名称。这是当前规范化为具有多个名称的事物模式:

我正在使用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查询,以便将这些查询从数据库导入此模式。此外,名称的
语言
字段并不总是正确的,因为它基于用户输入


我在看Solr的报价,看起来很不错。但它们似乎只对整个文档起作用,我想在这种情况下不会有多大帮助。有没有办法在模式中指定一个
多值
字段,我可以在其中存储名称,并相应地自动检测和索引其语言?或者其他语言检测工具可以让我的生活更轻松的方式?

您可能可以编写一个转换器,在索引端执行此操作,但查询端无法获得相同的分析链,因此无法工作

这些“东西”的文本是什么样子的

如果少于200个字符,语言ID将无法正常工作。可以用统计方法将其视为“语言猜测”。对于少量的数据,猜测是错误的。“手机”是英语还是丹麦语?两者都有,真的。“死”是英语和德语,等等。要猜得准,一千个字符会很有帮助

文本是否有商标名称?“LaserJet”和“Linux”在所有语言中都是相同的,很少有变化,所以语言处理根本不起任何作用。也许你可以不用特定语言的词干

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

<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>