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_Lucene_Lucene.net - Fatal编程技术网

Search 如何使用Lucene索引和搜索多个术语和短语

Search 如何使用Lucene索引和搜索多个术语和短语,search,lucene,lucene.net,Search,Lucene,Lucene.net,我正在使用Lucene.NET为一组文档的内容编制索引。我的索引包含几个字段,但我主要关心的是查询“contents”字段。我试图找出索引的最佳方法,以及创建查询的最佳方法,以满足需求 以下是目前的要求: 能够搜索多个关键字,如“飞机、火车、汽车”(不含引号)。这应该给我所有包含任何一个术语的文档,但是包含所有三个术语的文档应该在顶部 能够搜索短语,如“飞机、火车和汽车”(带引号),这些短语只有在按顺序排列时才会匹配 至于停止词,我可以完全忽略它们,或者包括它们 至于标点符号或特殊字符,同样处

我正在使用Lucene.NET为一组文档的内容编制索引。我的索引包含几个字段,但我主要关心的是查询“contents”字段。我试图找出索引的最佳方法,以及创建查询的最佳方法,以满足需求

以下是目前的要求:

  • 能够搜索多个关键字,如“飞机、火车、汽车”(不含引号)。这应该给我所有包含任何一个术语的文档,但是包含所有三个术语的文档应该在顶部
  • 能够搜索短语,如“飞机、火车和汽车”(带引号),这些短语只有在按顺序排列时才会匹配
  • 至于停止词,我可以完全忽略它们,或者包括它们
  • 至于标点符号或特殊字符,同样处理。我可以完全忽略它们,也可以将它们包括在内
  • 最后两个只需要保持一致,不一定是彼此一致,而是索引器和搜索器如何处理它们。所以我不想出现这样的情况:用户搜索“飞机和火车”,但它与包含该短语的文档不匹配,因为索引器去掉了“和”,但搜索者试图搜索该特定短语

有些文档很大,所以我想我们不想做Field.Store.Yes,对吗?除非我们必须为我们需要做的事付出代价

使用lucene的标准分析器和queryparser可以很好地处理您列出的需求。确保在IndexWriter和QueryParser中使用相同的分析器。停止词被删除。标点符号通常被忽略,尽管规则比忽略每个标点符号要复杂一些(如果您对细节感兴趣,请参阅)

如果您尝试运行,您会发现它的工作原理与您在此处指定的差不多

至于存储字段,您是对的。如果需要从索引中检索字段,请存储该字段。不需要检索的大型字段不需要存储