我是新来的Lucene和试图解析原始字符串成一个Query
使用QueryParser
。
我很纳闷,为什么是QueryParser.Parse()
方法需要一个分析器参数呢?
如果分析是某种与查询做,那么Analyzer
应该规定定期打交道时, Query
对象以及( TermQuery
, BooleanQuery
等),如果没有,为什么QueryParser
需要呢?
我是新来的Lucene和试图解析原始字符串成一个Query
使用QueryParser
。
我很纳闷,为什么是QueryParser.Parse()
方法需要一个分析器参数呢?
如果分析是某种与查询做,那么Analyzer
应该规定定期打交道时, Query
对象以及( TermQuery
, BooleanQuery
等),如果没有,为什么QueryParser
需要呢?
索引时,Lucene的分割文本到原子单位(令牌)。 在这个阶段,很多事情都可能发生(例如lowercasing,制止,拆除停用词的,等等)。 最终的结果是一个术语。
然后,当你查询,Lucene的应用完全一样的算法来查询,以便它可以用一个术语匹配项。
问:为什么不TermQuery
需要分析?
答: QueryParser
对象解析查询串并产生TermQuery
(也可以产生其它类型的查询,例如PhraseQuery
)。 TermQuery
已经包含在相同的形状条款,因为它们是在索引中。 如果您(作为程序员)是绝对相信你做什么,你可以创建一个TermQuery
自己-但是这个假设您知道查询解析的确切顺序,你知道的术语看怎么样在索引中。
问:为什么不BooleanQuery
需要分析?
答: BooleanQuery
刚刚加入使用操作符(AND / OR / MUST / SHOULD等)等查询。 这不是真正有用的本身,没有任何其他的查询。
这是一个非常简单的答案。 我强烈建议你阅读现代信息检索书; 它包含基于该理论等的Lucene(和其他类似的框架)被写入。 这本书可以在网上免费。