Lucene.NET - 搜索词组包含“和”

时间:2009-09-15 22:52:27

标签: lucene.net

寻找有关处理&符号的建议以及Lucene查询中的“和”一词。我的测试查询是(包括引号):

  • “油气田”(完整的短语)
  • “研发”(完整的短语)
  • “r& d”(完整的短语)

理想情况下,我想使用QueryParser,因为输入来自用户。

在测试和文档阅读期间,我发现使用StandardAnalyzer并不适用于我想要的内容。对于前两个查询,QueryParser.Parse将其转换为:

contents:"oil gas field"
contents:"research development"

这不是我想要的。如果我使用PhraseQuery代替,我得不到任何结果(大概是因为“和”没有编入索引。

如果我使用SimpleAnalyzer,那么我可以找到这些短语,但QueryParser.Parse将最后一个字词转换为:

contents:"r d"

这又不是我想要的。

有什么建议吗?

2 个答案:

答案 0 :(得分:3)

如果你想搜索“和”,你必须索引它。写下你自己的分析器或从停用词列表中删除“和”。这同样适用于“r& d”。编写自己的分析器,从文本中创建3个单词:“r”,“d”,“r& d”。

答案 1 :(得分:3)

与Lucene合作的第一步是接受几乎所有的工作都是在编制索引时完成的。如果要搜索某些内容,请将其编入索引。如果您想忽略某些内容,则不要将其编入索引。正是这使得Lucene能够提供如此高速的搜索。

这样做的结果是,要使索引有效工作,您必须预先确定分析仪需要做什么。在这种情况下,我会编写自己的分析器,不会删除任何停用词,也会转换&到'和'(以及可选地@到'''等)。在r& d匹配研究和开发你几乎肯定要实现一些领域特定的逻辑。

还有其他方法可以解决这个问题。如果您可以区分短语搜索和普通关键字搜索,则没有理由不能维护两个或多个索引来处理不同类型的搜索。这样可以快速搜索,但需要更多维护。

另一种选择是使用Lucene的高速度将初始结果过滤到使用不会产生假阴性的分析器更易于管理的事物。然后,您可以对它找到的那些文档的全文进行一些详细的过滤,以匹配正确的短语。

最终我认为你会发现Lucene牺牲了更高级搜索的准确性以提供速度,对于大多数人来说它通常都足够好。你可能在未知的水域试图调整你的分析仪。