search - 使用 lucene 进行多语言搜索

标签 search indexing lucene full-text-search multilingual

我正在做多语言搜索。我将使用 lucene 作为工具来做这件事。

我已经有翻译的内容了,每个文件会有3到4种语言。

对于索引和搜索,可能有 4 种策略,对于每个文档/内容:

  • 每种语言都在不同的索引/目录中编入索引。
  • 每种语言都在不同的文档中编入索引,但在同一索引中。
  • 每种语言都在不同的字段中索引,但在同一文档中。
  • 所有语言都在文档中的同一字段中编入索引

  • 但是我还没有测试每一种方式,有经验的人能告诉我哪种方式更适合进行多语言搜索吗?

    谢谢!

    最佳答案

    尽管这个问题是几年前提出的,但它仍然是一个很好的问题。

    有几个方面需要考虑评估不同的解决方案:

  • 索引时是否使用特定于语言的分析器?
  • 查询语言是否始终已知(例如,用户可选择)?
  • 查询语言是否总是匹配“内容”语言之一?
  • 应该只重新调整与查询语言匹配的内容吗?
  • 相关性重要吗?

  • 如果 (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
    

    多个指数 (策略一)
    + 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
    

    独立于单个或多个字段方法,如果您将内容索引为多个文档,您的解决方案可能需要处理“错误”语言中匹配项的结果折叠。一种方法可能是添加一个语言字段并为此过滤。

    推荐:您选择的方法/策略取决于项目要求。只要有可能,我都会选择多字段或多索引方法。

    关于search - 使用 lucene 进行多语言搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7280368/

    相关文章:

    c# - 实现 SOLR.Net 和 LUCENE.Net

    elasticsearch - Elasticsearch 支持 30.5Gb 堆(总共 256 Gb 内存)有多少虚拟内存?

    algorithm - 函数按预期执行,但在循环结束时返回 nil 值

    使用 Apache Solr 搜索名称

    java - 在 Lucene 中通过 AND 条件一起搜索 TextField 和 IntField

    lucene - ElasticSearch 构面计数与总项目不匹配

    java - 我在 Marklogic 中使用 Java API 进行通配符自定义搜索有什么问题?

    java - 大O 方法的复杂性

    elasticsearch - 如何从ES查询中了解ES索引?

    list - 通过列表列表中的索引获取元素/元素的索引