JavaLucene:queryparser vs phrasequery或termquery
不使用queryparser和使用phrasequery或termquery的优点是什么?在我看来,你可以用queryparser来代替这些吗
例如,如果我想搜索一个确切的短语,我可以:
String searchString = "\"word1 word2\"";
QueryParser queryParser = new QueryParser(Version.LUCENE_46,"content", analyzer);
Query query = queryParser.parse(searchString);
或者如果我想搜索两个词,我可以这样做
String searchString = "word1* AND word2*";
QueryParser queryParser = new QueryParser(Version.LUCENE_46,"content", analyzer);
Query query = queryParser.parse(searchString);
目前,我只使用queryparser,它对我有效,但这是使用Lucene的正确方式吗
# 1 楼答案
不使用
QueryParser
的主要缺点如下(使用Solr/Elastic时尤其如此):当您创建
TermQuery
时,如下所示:问题是您需要手动应用分析仪/过滤器。假设用户类型
KeyWord
,那么如果您只是将其传递到TermQuery
,您将找不到任何内容,如果在索引期间使用小写。当然,小写很简单,但您是否希望应用代码中的所有内容来进行词干/语法分析等,而不依赖于分析器/过滤器的现有功能