Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Search 使用lucene的多语言搜索_Search_Indexing_Lucene_Full Text Search_Multilingual - Fatal编程技术网

Search 使用lucene的多语言搜索

Search 使用lucene的多语言搜索,search,indexing,lucene,full-text-search,multilingual,Search,Indexing,Lucene,Full Text Search,Multilingual,我正在进行多语言搜索。我将使用lucene作为工具来完成这项工作 我已经有翻译的内容,每个文件将有3或4种语言 对于索引和搜索,每个文档/内容可能有4种策略: 每种语言都在不同的索引/目录中编制索引 每种语言都在不同的文档中编制索引,但索引相同 每种语言都在同一文档中的不同字段中编制索引 所有语言都在文档的同一字段中编制索引 但是我还没有对每种方法进行测试,有经验的人能告诉我哪种方法更适合进行多语言搜索吗 谢谢 简而言之,这取决于你的需要,但我会选择选项3或1 1) 如果两种语言之间没有重叠/共

我正在进行多语言搜索。我将使用lucene作为工具来完成这项工作

我已经有翻译的内容,每个文件将有3或4种语言

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

  • 每种语言都在不同的索引/目录中编制索引
  • 每种语言都在不同的文档中编制索引,但索引相同
  • 每种语言都在同一文档中的不同字段中编制索引
  • 所有语言都在文档的同一字段中编制索引
  • 但是我还没有对每种方法进行测试,有经验的人能告诉我哪种方法更适合进行多语言搜索吗


    谢谢

    简而言之,这取决于你的需要,但我会选择选项3或1

    1) 如果两种语言之间没有重叠/共享字段,这可能是最好的方法

    3) 如果有多个字段需要跨语言共享,这将是一种可行的方法,因为这样可以节省磁盘空间,并允许文件系统缓存中容纳更大的索引部分

    我不推荐2):这会使搜索查询更加复杂,迫使Lucene考虑更多的文件。


    4) 这将使您的搜索查询变得非常复杂,除非您希望用户能够在不选择任何语言的情况下使用任何语言进行搜索。

    虽然这个问题在几年前就被提出了,但它仍然是一个很好的问题

    对于不同的解决方案,有两个方面需要考虑:

  • 索引时是否使用特定于语言的分析器
  • 查询语言是否总是已知的(例如,用户可选择)
  • 查询语言是否始终与其中一种“内容”语言匹配
  • 应该只重新调整与查询语言匹配的内容吗
  • 相关性重要吗
  • 如果(1)和(5)在你的项目中是有效的,你不应该考虑任何策略(RE)在同一个倒排索引中使用多个语言相同的字段,因为各种语言的术语频率都被混淆了(独立于你是否把你的多语言内容作为一个文档或多个文档来索引)。可能有意思的是,添加“n”个特定于语言的字段并不会导致“n”倍的索引,但由于明显的原因,它会带来一些开销


    单个字段(策略2和策略4)


    多个字段(策略3)


    多个指数(策略1)


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


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

    如果我需要,用户不会选择哪种语言,而是选择所有语言。事实上,我在考虑2)。为什么4)是复杂的?因为分析仪?我以为你想让用户先选择语言。如果你不喜欢,我会推荐2)或4)。2) 它的缺点是,只要不同语言中有相同的单词,同一个“命中”就会得到多个文档。谢谢!2) 我确实有这个缺点。我必须编写代码来过滤重复。我可以问一下2)和3)的区别吗?3不会产生重复的点击,但是你的查询会更复杂,因此lucene需要做更多的工作。然而,在实践中,只要语言的数量不增加,这不可能是一个问题。顺便说一句,如果我的答案是有帮助的,如果你接受它或至少投票支持它,那将是很好的
    + 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)
    
    + 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