lucene_04_解析语法查询

 

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

例如:apache

查询全部的查询器的语法为:*:*,由于lucene查询是根据term来作的,既是:key:value类型。*:*表示全部域中的全部值。api

 

api调用语法解析spa

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

 <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);

 

区间查询xml

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

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

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

 

组合条件查询class

第一种写法:
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);
相关文章
相关标签/搜索