Search 如何使用Lucene索引和搜索多个术语和短语
我正在使用Lucene.NET为一组文档的内容编制索引。我的索引包含几个字段,但我主要关心的是查询“contents”字段。我试图找出索引的最佳方法,以及创建查询的最佳方法,以满足需求 以下是目前的要求:Search 如何使用Lucene索引和搜索多个术语和短语,search,lucene,lucene.net,Search,Lucene,Lucene.net,我正在使用Lucene.NET为一组文档的内容编制索引。我的索引包含几个字段,但我主要关心的是查询“contents”字段。我试图找出索引的最佳方法,以及创建查询的最佳方法,以满足需求 以下是目前的要求: 能够搜索多个关键字,如“飞机、火车、汽车”(不含引号)。这应该给我所有包含任何一个术语的文档,但是包含所有三个术语的文档应该在顶部 能够搜索短语,如“飞机、火车和汽车”(带引号),这些短语只有在按顺序排列时才会匹配 至于停止词,我可以完全忽略它们,或者包括它们 至于标点符号或特殊字符,同样处
- 能够搜索多个关键字,如“飞机、火车、汽车”(不含引号)。这应该给我所有包含任何一个术语的文档,但是包含所有三个术语的文档应该在顶部
- 能够搜索短语,如“飞机、火车和汽车”(带引号),这些短语只有在按顺序排列时才会匹配李>
- 至于停止词,我可以完全忽略它们,或者包括它们李>
- 至于标点符号或特殊字符,同样处理。我可以完全忽略它们,也可以将它们包括在内李>
- 最后两个只需要保持一致,不一定是彼此一致,而是索引器和搜索器如何处理它们。所以我不想出现这样的情况:用户搜索“飞机和火车”,但它与包含该短语的文档不匹配,因为索引器去掉了“和”,但搜索者试图搜索该特定短语李>
有些文档很大,所以我想我们不想做Field.Store.Yes,对吗?除非我们必须为我们需要做的事付出代价 使用lucene的标准分析器和queryparser可以很好地处理您列出的需求。确保在IndexWriter和QueryParser中使用相同的分析器。停止词被删除。标点符号通常被忽略,尽管规则比忽略每个标点符号要复杂一些(如果您对细节感兴趣,请参阅) 如果您尝试运行,您会发现它的工作原理与您在此处指定的差不多 至于存储字段,您是对的。如果需要从索引中检索字段,请存储该字段。不需要检索的大型字段不需要存储