• 【Lucene4.8教程之六】QueryParser与Query子类:如何生成Query对象



    一、概述

    1、对于一个搜索而言,其核心语句为:

    searcher.search(query, 10);
    此时,其最重要的参数为一个Qeury对象。构造一个Query对象有2种方法:

    (1)使用Query的子类创建一个对象。

    (2)使用QueryParser.parse()创建一个对象。

    常用的用于实例化一个对象的Query子类有以下13个:
    TermQuery
    BooleanQuery
    WildcardQuery
    PhraseQuery
    PrefixQuery
    MultiPhraseQuery
    FuzzyQuery
    RegexpQuery
    TermRangeQuery
    NumericRangeQuery
    ConstantScoreQuery
    DisjunctionMaxQuery
    MatchAllDocsQuery

    2、快速入门

    【均以在contents域搜索java关键词为例】

    (1)使用Query的子类,,直接实例化一个对外:

    searcher.search( new TermQuery(new Term("contents","java")), 10);

    以下语句结构更为清晰

    Term term= new Term("contents","java");
    TermQuery tq = new TermQuery(term);
    searcher.search(tq , 10);

    此外,即为在contents域中搜索包括java的文档。

    (2)使用QueryParser的parse()方法,对所传入的搜索关键词汇进行解释,并返回query对象。

    QueryParser parser = new QueryParser(Version.LUCENE_48, "contents",new SimpleAnalyzer(Version.LUCENE_48));
    Query query = null;
    try {
    	query = parser.parse("java");
    } catch (ParseException e) {
    	e.printStackTrace();
    }
    TopDocs docs = searcher.search(query, 10);
    以上语句创建一个QueryParser,其默认搜索域为contents,然后将搜索词汇转化为Query对象。

    如果指定QueryParser的默认搜索域为全部?如何指定一个Query的搜索域?


    二、TermQuery

    1、创建方式

    上述快速入门中使用的就是TermQuery。

    2、适用范围

    (1)直接使用TermQuery,不对搜索词作任何的分析,包括大小写都不作转换,而使用QueryParser,则可以根据Analyzer的类型作分析。

    (2)TermQuery适合使用于完全匹配的搜索,如搜索id号,二维码,姓名等。


    三、BooleanQuery

    1、创建方式

    (1)使用BooleanQuery

    多个搜索条件组成BooleanQuey对象,以后补充例子。

    (2)使用QueryParser

    对于一个QueryParser,若其未指定是何种逻辑操作,则其将默认为Operator.OR。因此,若搜索 java web,则其会认为java OR web。

    而对于中文,使用StandartAnalyzer分析器时,会将每个字作为一个词汇。如搜索“学习”,则搜索“学 OR 习”。

    因此,为指定搜索“学习”或者'java web"等,必须显示指定逻辑操作为Operator.AND。

    QueryParser parser = new QueryParser(Version.LUCENE_48, "contents",
    				new StandardAnalyzer(Version.LUCENE_48));
    parser.setDefaultOperator(Operator.AND);
    Query query  = parser.parse(term);

    2、适用范围

    (1)BooleanQuery方式,由于需要将搜索内容生成多个Query对象,再进行逻辑组合,因此,只适用于根据多个搜索条件进行搜索的情形。如:

       

    在上述页面选择多个筛选条件,然后,每个筛选条件生成一个Query对象,再将各个Query对象进行逻辑组合。

    (2)QueryParser方式,适用于单一搜索框,使用自然语言进行搜索的情形。如google,百度等搜索框。


    四、PhraseQuery

    1、简单说明

    在使用双引号将搜索关键字括起来,则将搜索关键词作为一个整体的短语进行搜索。如:




    前者只有534个返回结果,后者有200多万返回结果。对于前者,将会搜索java 和sunshine之间的距离少于一个特定的slop值的文档。







  • 相关阅读:
    [置顶] Blender 三维绘图及渲染软件 (开源优秀强大跨平台)
    观察力训练(福尔摩斯演绎法)
    Shiro 权限框架使用总结
    [置顶] 如何编写出优美的 JavaScript 代码
    TopCoder 入门教程 sqybi完善版
    开源 3D CAD 软件 gCAD3D 1.9.1 发布
    Java 局部内部类访问局部变量必须加 final 关键字
    [置顶] 程序员如何做出“不难看”的设计
    JavaFX DirectoryChooser[目录选择器]使用实例及源代码[图文]
    项目管理软件收集
  • 原文地址:https://www.cnblogs.com/eaglegeek/p/4557912.html
Copyright © 2020-2023  润新知