如何使用 Lucene 索引和搜索多个术语和短语
How to Index and Search multiple terms and phrases with Lucene
我正在使用 Lucene.NET 来索引一组文档的内容。我的索引包含几个字段,但我主要关心查询 "contents" 字段。我试图找出最好的索引方式以及创建查询的方式来满足要求。
当前要求如下:
- 能够搜索多个关键字,例如"planes trains automobiles"(减去引号)。这应该给我所有包含任何术语的文档,但是包含所有三个术语的文档应该在顶部
- 能够搜索短语,例如 "planes, trains, and automobiles"(带引号),只有按顺序在一起时才会匹配。
- 至于停用词,我可以完全忽略它们,也可以包括它们。
- 至于标点符号或特殊字符,同理。我可以完全忽略它们,也可以包括它们。
- 最后两个只需要保持一致,不一定彼此一致,但与索引器和搜索器处理它们的方式一致。所以我只是不想出现用户搜索 "planes and trains" 但它与包含该短语的文档不匹配的情况,因为索引器取出了 "and" 但搜索器是试图搜索那个特定的短语。
有些文档很大,所以我想我们不想做 Field.Store.Yes,对吧?除非我们必须做我们需要做的事情。
使用 lucene 的标准分析器和 queryparser 应该可以很好地处理您列出的要求。确保在 IndexWriter 和 QueryParser 中使用相同的分析器。停用词被消除。标点符号通常会被忽略,尽管规则有点复杂,只是忽略 每个 标点字符(如果您对详细信息感兴趣,请参阅 UAX #29, section 4)
如果您尝试 运行 和 Lucene demo,您应该会发现它与您在此处指定的一样有效。
就存储字段而言,你没看错,是的。如果您需要从索引中检索它,请存储该字段。不需要检索的大字段不需要存储。
我正在使用 Lucene.NET 来索引一组文档的内容。我的索引包含几个字段,但我主要关心查询 "contents" 字段。我试图找出最好的索引方式以及创建查询的方式来满足要求。
当前要求如下:
- 能够搜索多个关键字,例如"planes trains automobiles"(减去引号)。这应该给我所有包含任何术语的文档,但是包含所有三个术语的文档应该在顶部
- 能够搜索短语,例如 "planes, trains, and automobiles"(带引号),只有按顺序在一起时才会匹配。
- 至于停用词,我可以完全忽略它们,也可以包括它们。
- 至于标点符号或特殊字符,同理。我可以完全忽略它们,也可以包括它们。
- 最后两个只需要保持一致,不一定彼此一致,但与索引器和搜索器处理它们的方式一致。所以我只是不想出现用户搜索 "planes and trains" 但它与包含该短语的文档不匹配的情况,因为索引器取出了 "and" 但搜索器是试图搜索那个特定的短语。
有些文档很大,所以我想我们不想做 Field.Store.Yes,对吧?除非我们必须做我们需要做的事情。
使用 lucene 的标准分析器和 queryparser 应该可以很好地处理您列出的要求。确保在 IndexWriter 和 QueryParser 中使用相同的分析器。停用词被消除。标点符号通常会被忽略,尽管规则有点复杂,只是忽略 每个 标点字符(如果您对详细信息感兴趣,请参阅 UAX #29, section 4)
如果您尝试 运行 和 Lucene demo,您应该会发现它与您在此处指定的一样有效。
就存储字段而言,你没看错,是的。如果您需要从索引中检索它,请存储该字段。不需要检索的大字段不需要存储。