Lucene学习笔记(二)——搜索,分词

本文介绍了Lucene的搜索思路,包括IndexSearcher、Query、Hits等基本概念。讲解了TermQuery、BooleanQuery、RangeQuery等不同类型的查询,并讨论了标准分析器StandarAnalyzer及其组件。还强调了在使用不同查询时需要注意的事项,例如最大子搜索数量限制和索引与搜索分析器的一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

搜索思路:构建IndexSearcher对象searcher -> 构建Query对象q,new TermQuery(Term t) -> 执行查询,searcher.search(q) -> 返回Hits类型结果。

基本概念:

IndexSearcher:索引器;

Query:抽象类,表示一个查询请求;

Hits:表示一次查询结果,其内部具有缓存机制;

TermQuery:词条搜索,继承Query;

BooleanQuery:布尔搜索,继承Query,可以包含多个子搜索(如词条搜索),使用add(Query q, BooleanClause.Occur b)方法把子搜索加入布尔搜索,子搜索间使用“与”,“或”等布尔逻辑进行组合;

RangeQuery:范围搜索,范围可以是日期时间数字大小等,需要创建上界和下界两个Term实例;

PrefixQuery:前缀搜索;

PraseQuery:短语搜索,使用add(new Term(String Feild, String keyword))方法把拆分后的短语加入短语搜索,可以使用setSlop(int s)设置坡度,默认是0;

MultiPhraseQuery:多短语搜索;

FuzzyQuery:模糊搜索;

WildcardQuery:通配符搜索,*代表0个或多个字符,?代表1个字符;

**QueryParse:自动构造合适的Query;

分词:将一个文本拆分为多个词条;

标准的分析器:由两部分组成,一部分是分词器(Tokenizer),另一部分是过滤器(TokenFilter),一个分析器由一个分词器和若干个过滤器组成;

StandarAnalyzer:标准分析器,使用了标准分词器(StandarTokenizer)和三个过滤器(StandarFilter,LowerCaseFilter,StopFilter);

StandarFilter:标准过滤器,对中文的意义不大,主要针对欧美文字;

LowerCaseFilter:大小写转换器,同样是针对欧美文字;

StopFilter:忽略词过滤器,用于忽略某些词,在构造其实例的时候,需要传入一个忽略词集合;


IndexSearcher构造函数:

1、IndexSearcher(String path) throws Exception

2、IndexSearcher(Directory dir) throws Exception

3、IndexSearcher(IndexReader r)

4、三个构造函数的参数都表示索引所在的目录;

TermQuery构造函数:

new TermQuery(new Term("field", "keyword"));

BooleanQuery构造函数:

new BooleanQuery();

RangeQuery构造函数:

new RangeQuery(Term begin, Term end, Boolean b);  //布尔值代表开区间或闭区间

PhraseQuery构造函数:

new PhraseQuery();

FuzzyQuery构造函数:

new FuzzyQuery(new Term(String field, String keyword));

WildcardQuery构造函数:

new WildcardQuery(new Term(String field, String keyword));

QueryParse构造函数:

new QueryParse(String field, new Analyzer());


BooleanClause.Occur的三个常量:

1、BooleanClause.Occur.MUST:一定符合该搜索

2、BooleanClause.Occur.MUST_NOT:一定不符合该搜索

3、BooleanClause.Occur.SHOULD:可以符合可以不符合该搜索

注意:

1、BooleanQuery默认的最大子搜索数量为1024,超过会抛出异常;

2、对于大的索引文件时,RangeQuery效率很低;

3、建立索引使用的分析器和用户搜索请求使用的分析器应该是同一个,或是具有相同的分词效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值