我是 Lucene 的新手,并尝试Query
使用QueryParser
.
我想知道,为什么该QueryParser.Parse()
方法根本需要一个 Analyzer 参数?
如果分析与查询有关,那么在处理常规对象Analyzer
时也应指定an (等),如果不是,为什么需要它?Query
TermQuery
BooleanQuery
QueryParser
我是 Lucene 的新手,并尝试Query
使用QueryParser
.
我想知道,为什么该QueryParser.Parse()
方法根本需要一个 Analyzer 参数?
如果分析与查询有关,那么在处理常规对象Analyzer
时也应指定an (等),如果不是,为什么需要它?Query
TermQuery
BooleanQuery
QueryParser
索引时,Lucene 将文本划分为原子单元(令牌)。在这个阶段,可能会发生很多事情(例如小写、词干、删除停用词等)。最终结果是一个术语。
然后,当您查询时,Lucene 将完全相同的算法应用于查询,因此它可以将术语与术语匹配。
问:为什么TermQuery
不需要分析仪?
A:QueryParser
对象解析查询字符串并产生TermQuery
(也可以产生其他类型的查询,例如PhraseQuery
)。TermQuery
已经包含与索引中形状相同的术语。如果您(作为程序员)绝对确定自己在做什么,则可以TermQuery
自己创建一个——但这假设您知道查询解析的确切顺序,并且您知道索引中的术语是什么样的。
问:为什么BooleanQuery
不需要分析仪?
答:BooleanQuery
只需使用运算符(AND/OR/MUST/SHOULD 等)连接其他查询。没有任何其他查询,它本身并不是真正有用的。
这是一个非常简化的答案。我强烈推荐阅读《信息检索简介》这本书;它包含编写 Lucene(和其他类似框架)所基于的理论。这本书在网上免费提供。