搜索引擎学习解析查询

Posted riches

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了搜索引擎学习解析查询相关的知识,希望对你有一定的参考价值。

QueryParser【解析查询】

定义:QueryParser的解析查询是用Lucene语法进行查询,而上一篇说到的子类查则是使用java对象来进行查询条件的封装。

使用方式:使用QueryParser也可以创建Query,QueryParser提供了一个parse方法,此方法可以直接根据查询语法来查询。

代码展示:

    /**
     * 条件解析对象查询
     * PS:lucene里面不支持对于字符串类型的范围查询,但是solr支持~
     *
     * 各种条件语句解析:
     * fileName:java【精准查询】
     * fileSize:1 TO 200【范围查询】
     * +fileName:java fileName:lunece【组合查询】
     * PS:组合查询不同的条件空格隔开,其中域前面的“+”号代表“条件必须满足”,“-”号代表“条件必须不满足”,没有符号代表“条件可选”,
     * PS:也可以用 AND、OR、NOT来表示上面的符号(详细解析见总结的图)
     * @throws Exception
     */
    @Test
    public void testQueryParser() throws Exception 
        //获取IndexSearcher(索引搜索)对象
        IndexSearcher indexSearcher = getIndexSearcher();
        //参数1:默认查询的域
        //参数2:采用的分析器
        QueryParser queryParser = new QueryParser("fileName", new StandardAnalyzer());
        //构建lucene查询条件的语法(第一个*是域,第二个*是域值)
        Query query = queryParser.parse("fileName:java");//*:*   域名:域值
        //打印查询的语法
        System.out.println(query);
        //执行查询并打印结果
        printResult(query, indexSearcher);
    

技术图片

 

MultiFieldQueryParser【指定多个默认搜索域的解析查询】

定义:在QueryParser的解析查询基础上扩展,支持多个默认域的查询。

 代码展示:

    /**
     * 多默认域解析查询
     * @throws Exception
     */
    @Test
    public void testMultiFieldQueryParser() throws Exception 
        //获取IndexSearcher(索引搜索)对象
        IndexSearcher indexSearcher = getIndexSearcher();


        //参数1:设置多个默认查询的域
        //参数2:采用的分析器
        String[] fieldNames = "fileName", "fileContent";//指定默认查询的多个域
        MultiFieldQueryParser queryParser = new MultiFieldQueryParser(fieldNames, new StandardAnalyzer());
        //构建lucene查询条件的语法(第一个*是域,第二个*是域值)
        Query query = queryParser.parse("java");//*:*   域名:域值


        //打印查询的语法
        System.out.println(query);
        //执行查询并打印结果
        printResult(query, indexSearcher);
    

 

以上是关于搜索引擎学习解析查询的主要内容,如果未能解决你的问题,请参考以下文章

MySQL学习笔记-存储引擎

解析MySQL的体系架构及学习Mysql存储引擎MyISAM和InnoDB

高性能Mysql学习笔记——Mysql体系结构

Lucene搜索详解

正向搜索查询和反向搜索查询的区别是啥?

如何在android中解析查询搜索案例不敏感?