为什么Lucene QueryParser需要分析仪

为什么Lucene QueryParser需要分析仪,lucene,analyzer,query-parser,Lucene,Analyzer,Query Parser,我是Lucene新手,尝试使用QueryParser将原始字符串解析为Query 我想知道,为什么QueryParser.Parse()方法需要一个Analyzer参数 如果分析与查询有关,那么在处理常规的Query对象(TermQuery,BooleanQuery等)时,也应该指定Analyzer,如果不是,为什么QueryParser需要它?索引时,Lucene将文本划分为原子单位(标记)。在此阶段可能会发生许多事情(例如,小写、词干、删除停止字等)。最终结果是一个术语 然后,当您进行查询时

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

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


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

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

然后,当您进行查询时,Lucene将完全相同的算法应用于查询,以便能够将术语与术语进行匹配

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

问:为什么
BooleanQuery
不需要analyzer?
答:
BooleanQuery
只是使用运算符(和/或/必须/应该等)连接其他查询。如果没有任何其他查询,它本身就没有什么用处


这是一个非常简化的答案。我强烈推荐阅读这本书;它包含了Lucene(和其他类似框架)所基于的理论是书面的。这本书在线免费提供。

谢谢,但它没有解释为什么仅在解析要查询的字符串时需要指定分析器,而在查询时不总是需要指定分析器。编辑了我的答案,如果不够清楚或遗漏了什么,请告诉我。