为什么Lucene的QueryParser的需求的分析(Why does Lucene QueryP

2019-08-17 07:37发布

我是新来的Lucene和试图解析原始字符串成一个Query使用QueryParser

我很纳闷,为什么是QueryParser.Parse()方法需要一个分析器参数呢?

如果分析是某种与查询做,那么Analyzer应该规定定期打交道时, Query对象以及( TermQueryBooleanQuery等),如果没有,为什么QueryParser需要呢?

Answer 1:

索引时,Lucene的分割文本到原子单位(令牌)。 在这个阶段,很多事情都可能发生(例如lowercasing,制止,拆除停用词的,等等)。 最终的结果是一个术语。

然后,当你查询,Lucene的应用完全一样的算法来查询,以便它可以用一个术语匹配项。

问:为什么不TermQuery需要分析?
答: QueryParser对象解析查询串并产生TermQuery (也可以产生其它类型的查询,例如PhraseQuery )。 TermQuery已经包含在相同的形状条款,因为它们是在索引中。 如果您(作为程序员)是绝对相信你做什么,你可以创建一个TermQuery自己-但是这个假设您知道查询解析的确切顺序,你知道的术语看怎么样在索引中。

问:为什么不BooleanQuery需要分析?
答: BooleanQuery刚刚加入使用操作符(AND / OR / MUST / SHOULD等)等查询。 这不是真正有用的本身,没有任何其他的查询。

这是一个非常简单的答案。 我强烈建议你阅读现代信息检索书; 它包含基于该理论等的Lucene(和其他类似的框架)被写入。 这本书可以在网上免费。



文章来源: Why does Lucene QueryParser needs an Analyzer