8

我是 Lucene 的新手,并尝试Query使用QueryParser.

我想知道,为什么该QueryParser.Parse()方法根本需要一个 Analyzer 参数?

如果分析与查询有关,那么在处理常规对象Analyzer时也应指定an (等),如果不是,为什么需要它?QueryTermQueryBooleanQueryQueryParser

4

1 回答 1

10

索引时,Lucene 将文本划分为原子单元(令牌)。在这个阶段,可能会发生很多事情(例如小写、词干、删除停用词等)。最终结果是一个术语。

然后,当您查询时,Lucene 将完全相同的算法应用于查询,因此它可以将术语与术语匹配。

问:为什么TermQuery不需要分析仪?
A:QueryParser对象解析查询字符串并产生TermQuery(也可以产生其他类型的查询,例如PhraseQuery)。TermQuery已经包含与索引中形状相同的术语。如果您(作为程序员)绝对确定自己在做什么,则可以TermQuery自己创建一个——但这假设您知道查询解析的确切顺序,并且您知道索引中的术语是什么样的。

问:为什么BooleanQuery不需要分析仪?
答:BooleanQuery只需使用运算符(AND/OR/MUST/SHOULD 等)连接其他查询。没有任何其他查询,它本身并不是真正有用的。

这是一个非常简化的答案。我强烈推荐阅读《信息检索简介》这本书;它包含编写 Lucene(和其他类似框架)所基于的理论。这本书在网上免费提供。

于 2013-03-05T14:32:16.837 回答