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

时间:2016-04-05 15:08:24

标签: search lucene lucene.net

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

以下是当前的要求:

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

有些文件很大,所以我想我们不想做Field.Store.Yes,对吧?除非我们必须做我们需要做的事情。

1 个答案:

答案 0 :(得分:3)

使用lucene的标准分析仪和queryparser可以很好地处理您列出的要求。确保在IndexWriter和QueryParser中使用相同的分析器。停止言语被消除。标点符号通常被忽略,但规则更多涉及忽略每个标点字符(如果您对细节感兴趣,请参阅UAX #29, section 4

如果您尝试运行Lucene demo,您应该会发现它的功能正如您在此处指定的那样。

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