【问题标题】:How to Index and Search multiple terms and phrases with Lucene如何使用 Lucene 索引和搜索多个术语和短语
【发布时间】:2016-04-05 15:08:24
【问题描述】:

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

以下是当前要求:

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

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

【问题讨论】:

    标签: search lucene lucene.net


    【解决方案1】:

    使用 lucene 的标准分析器和查询解析器应该可以很好地处理您列出的要求。确保在 IndexWriter 和 QueryParser 中使用相同的分析器。停用词被消除。标点符号通常会被忽略,尽管规则比忽略每个标点符号要复杂一些(如果您对细节感兴趣,请参阅UAX #29, section 4

    如果您尝试运行Lucene demo,您应该会发现它的工作原理与您在此处指定的一样。

    就存储字段而言,您说得对,是的。如果您需要从索引中检索该字段,请存储该字段。不需要存储不需要检索的大字段。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-22
      • 1970-01-01
      • 2011-07-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多