2016-04-05 72 views
1

我使用Lucene.NET来索引一组文档的内容。我的索引包含几个字段,但我主要关心的是查询“内容”字段。我试图找出索引的最佳方式,以及创建查询,以满足要求。如何使用Lucene索引和搜索多个术语和短语

以下是当前要求:

  • 能够搜索多个关键字,如“飞机火车汽车”(减去引号)。这应该给我包含任何条款的所有文件,但包含所有三个文件的文件应该在顶部
  • 能够搜索短语,例如“飞机,火车和汽车”(带引号)只有在他们在一起时才符合。
  • 至于停用词,我会完全忽略它们或者包括它们。
  • 至于标点或特殊字符,相同的交易。我可以完全忽略它们,或者包含它们。
  • 最后两个只需要一致,不一定与对方,但索引器和搜索器如何处理它们。所以我只是不想让用户搜索“飞机和火车”,但它不匹配包含该短语的文档,因为索引器取出了“and”,但搜索者试图搜索特定的短语。

一些文件很大,所以我认为我们不想做Field.Store.Yes,对吗?除非我们必须为我们需要做的事情做准备。

回答

3

您列出的要求应该使用lucene的标准分析器和queryparser来处理。确保在IndexWriter和QueryParser中使用相同的分析器。停止词被消除。标点通常被忽视,虽然规则是多一点参与,只是忽略标点符号(见UAX #29, section 4,如果你有兴趣的细节)

如果您尝试运行Lucene demo,你会发现它只是就像你在这里指定的一样。

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