为什么Lucene QueryParser需要分析器

时间:2013-03-05 14:29:31

标签: lucene analyzer query-parser

我是Lucene的新手并尝试使用Query将原始字符串解析为QueryParser

我在想,为什么QueryParser.Parse()方法需要一个Analyzer参数?

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

1 个答案:

答案 0 :(得分:10)

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

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

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

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

这是一个非常简化的答案。我强烈建议您阅读Introduction to Information Retrieval本书;它包含了基于Lucene(和其他类似框架)编写的理论。这本书可以在线免费获得。