有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    不使用QueryParser的主要缺点如下(使用Solr/Elastic时尤其如此):

    当您创建TermQuery时,如下所示:

    Query q = new TermQuery("text", "keyword")
    

    问题是您需要手动应用分析仪/过滤器。假设用户类型KeyWord,那么如果您只是将其传递到TermQuery,您将找不到任何内容,如果在索引期间使用小写。当然,小写很简单,但您是否希望应用代码中的所有内容来进行词干/语法分析等,而不依赖于分析器/过滤器的现有功能