核心索引类

  • IndexWriter

    1
    2
    进行索引写操作的一个中心组件。
    不能进行读取和搜索
  • Directory

    1
    2
    3
    4
    5
    6
    7
    Directory代表Lucene索引的存放的位置。
    常用的实现:
    FSDirectory:表示一个存储在文件系统中的索引的位置
    RAMDirectory:表示一个存储在内存当中的索引的位置
    作用:
    IndexWiter通过获取Directory的一个具体实现,在Directory指向的位置中常见索引
  • AnalyZer

    1
    2
    Analyzer,解析器。相当于筛子,对内容进行筛选,过滤无用杂质(停用词)
    作用:把过滤之后的数据交给indexWriter创建索引
  • Document

    1
    2
    用来存放数据。该数据为从非结构化数据中抓取的相关数据。
    通过Filed(域)组成Document。类似于mysql中的一个个字段组成一条数据。
  • Field

    1
    存放在Document中的字段。

核心搜索类

  • IndexSearcher

    1
    2
    IndexSearcher在建立好的索引上进行搜索
    他只能以只读的方式打开一个索引,所以可以有多个IndexSearcher的实例在一个索引上进行操作
  • Term

    1
    2
    3
    Term是搜索的基本单元。一个Term有key:value组成(类似于mysql中->字段名称=值)
    栗子:Query query = new TermQuery(new Term("fileName","lucene"));
  • Query

    1
    Query是一个抽象类,用来将用户输入的查询字符串封装成Lucene能够识别的Query

    TermQuery

    1
    2
    Query子类,Lucene支持的最基本的一个查询类
    栗子:TermQuery termQuery = new TermQuery(new Term("fileName","lucene"));

    BooleanQuery

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    BooleanQUery,布尔搜索。是一个组合QUery。
    BooleanQuery是可以嵌套的。
    栗子:
    BooleanQuery query = new BooleanQuery();
    BooleanQuery query2 = new BooleanQuery();
    TermQuery termQuery1 = new TermQuery(new Term("fileName", "lucene"));
    TermQuery termQuery2 = new TermQuery(new Term("fileName", "name"));
    query2.add(termQuery1, Occur.SHOULD);
    query.add(termQuery2, Occur.SHOULD);
    query.add(query2, Occur.SHOULD);; //BooleanQuery是可以嵌套的
    Occur枚举:
    MUST
    SHOULD
    FILTER
    MUST_NOT

    NumericRangeQuery

    1
    2
    3
    数字区间查询:
    栗子:
    Query newLongRange = NumericRangeQuery.newLongRange("fileSize",0l, 100l, true, true);

    PrefixQuery

    1
    2
    3
    前缀查询。查询分词中含有指定字符开头的内容
    栗子:
    PrefixQuery query = new PrefixQuery(new Term("fileName","l"));

    PhraseQuery

    1
    2
    3
    4
    5
    6
    短语搜索。
    栗子1:
    PhraseQuery query = new PhraseQuery();
    query.add(new Term("fileName","lucene"));

    FuzzyQuery

    1
    2
    3
    4
    模糊查询
    栗子:
    FuzzyQuery query = new FuzzyQuery(new Term("fileName","lucene"));

    WildcardQuery

    1
    2
    3
    4
    5
    通配符查询:
    * :任意字符(0或多个)
    ? : 一个字符
    栗子:WildcardQuery query = new WildcardQuery(new Term("fileName","*"));

    RegexQuery

    1
    2
    3
    4
    正则表达式搜索
    栗子:搜索含有最少1个字符,最多6个字符的
    RegexQuery query = new RegexQuery(new Term("fileName","[a-z]{1,6}"));

    MultiFieldQueryParser

    1
    2
    3
    4
    5
    6
    多个默认域搜索
    栗子:
    String[] fields = {"fileName","fileContent"};
    MultiFieldQueryParser queryParser = new MultiFieldQueryParser(fields, new StandardAnalyzer());
    Query query = queryParser.parse("fileName:lucene AND filePath:a");