zoukankan      html  css  js  c++  java
  • lucene_04_解析语法查询

    解析语法查询就是调用方法查询的原始查询

    例如:

    查询所有的查询器的语法为:*:*,因为lucene查询是根据term来做的,既是:key:value类型。*:*表示所有域中的所有值。

    api调用语法解析

    pom.xml 必须引入(其余的参看lucene_02).

     <dependency>
          <groupId>org.apache.lucene</groupId>
          <artifactId>lucene-queryparser</artifactId>
          <version>4.10.3</version>
    </dependency>
      //初始化org.apache.lucene.queryparser.classic.QueryParser;
            //参数1:默认查询的域
            //参数2:解析器
            QueryParser queryParser = new QueryParser("fileName", new IKAnalyzer());
    //        Query query = queryParser.parse("*:*");
            Query query = queryParser.parse("apache");
            printResult(query);

    区间查询

    语法为: [0 TO 800}。TO左边为最小值,右边为最大值。“}”,“{”为不包含,“[”,“]”为包含。

    组合语法应该为:“域:[0 TO 800}”

    但是在lucene中不支持字符串的范围查询,所以只能使用 NumericRangeQuery.newLongRange。但在solr中就能使用字符串的语法查询。

    组合条件查询

    第一种写法:
    1) +条件1+条件2: 两个条件之间是并且的关系and。

    例如: +filename:apache +content:apaches
    2) +条件1条件2: 必须满足第一个条件,应该满足第二个条件。

    例如: +filename:apache content:apache.
    3) 条件1条件2: 两个条件满足其一即可。

    例如: filename:apache content:apacher
    4)-条件1条件2: 必须不满足条件1,要满足条件2。

    例如:-filename:apache content:apaches。

    示例:

     //初始化org.apache.lucene.queryparser.classic.QueryParser;
            //参数1:默认查询的域
            //参数2:解析器
            QueryParser queryParser = new QueryParser("fileName", new IKAnalyzer());
    //        Query query = queryParser.parse("*:*");
    //        Query query = queryParser.parse("apache");
            Query query = queryParser.parse("+fileName:java  fileContent:coordination to your microservices");
            printResult(query);


    Occur.MUST 查询条件必须满足,相当于and (加号)。
    Occur.SHOULD 查询条件可选,相当于or空(不用符号)。
    Occur.MUST_NOT 查询条件不能满足,相当于not 非一(减号)。


    第二种写法:
    条件1 AND 条件2

    条件1 OR 条件2

    条件1NOT 条件2.

    示例:

    等同于第一种方法

    @Test
        public void testParseQuery() throws Exception {
            //初始化org.apache.lucene.queryparser.classic.QueryParser;
            //参数1:默认查询的域
            //参数2:解析器
            QueryParser queryParser = new QueryParser("fileName", new IKAnalyzer());
    //        Query query = queryParser.parse("*:*");
    //        Query query = queryParser.parse("apache");
            Query query = queryParser.parse("fileName:java  OR fileContent:coordination to your microservices");
            printResult(query);
        }

    多默认域:了解。

    Query query = queryParser.parse("fileName:java  OR fileContent:coordination to your microservices");这种方式已经可以替代。
      String[] fields = {"fileSize","fileContent"};
            MultiFieldQueryParser multiFieldQueryParser = new MultiFieldQueryParser(fields,new IKAnalyzer());
            Query query1 = multiFieldQueryParser.parse("java");
            printResult(query1);
  • 相关阅读:
    扩展域并查集经典题
    2010提高组-C]关押罪犯(扩展域并查集
    [2015普及组-D]推销员 思维que
    The 2019 Asia Nanchang First Round Online Programming Contest C(cf原题,线段树维护矩阵)
    Fire-Fighting Hero(多源最短路和单源最短路)
    The Preliminary Contest for ICPC Asia Xuzhou 2019
    Cow Routing(最短路spfa)
    hdu6582
    ACM_题目这么难,来局愉快的昆特牌吧
    ACM_水题你信吗
  • 原文地址:https://www.cnblogs.com/getchen/p/8691274.html
Copyright © 2011-2022 走看看