lucene全文检索精华(5)

2019-08-31 12:51

9 lucene的各种查询

9.1 关键字查询TermQuery

// 关键词查询 @Test

public void testTermQuery() {

// 对应的查询字符串为:title:lucene

Query query = new TermQuery(new Term(\, \)); }

9.2 使用查询字符串+QueryParser的查询方式

1、QueryParser:只在一个字段中查询

2、MultiFieldQueryParser:可以在多个字段查询

// 字符串查询 @Test

public void testParserQuery() throws ParseException {

String[] fields={\,\}; //字符串搜索

QueryParser queryParser=new

MultiFieldQueryParser(LuceneUtil.getMatchVersion(), fields, LuceneUtil.getAnalyzer());

}

//根据关键字java来检索数据

Query query=queryParser.parse(\);

9.3 查询所有MatchAllDocsQuery

// 查询所有 @Test

public void testMatchAllDocsQuery() { // 对应的查询字符串为:*:*

Query query = new MatchAllDocsQuery(); }

9.4 范围查询NumericRangeQuery

// 范围查询 @Test

public void testNumericRangeQuery() { }

Query query = NumericRangeQuery.newIntRange(\, 1, 10, false,

false);

这种方式和过滤相比,效率要比过滤要高,推荐用这种。

9.5 通配符查询WildcardQuery

// ? 代表1个任意字符 // * 代表0或多个任意字符 @Test

public void testWildcardQuery() {

// 对应的查询字符串为:title:lu*n?

Query query = new WildcardQuery(new Term(\, \)); }

9.6 模糊查询FuzzyQuery

// 模糊查询 @Test

public void testFuzzyQuery() {

// //最大的可编辑数,不用被编辑的数量

FuzzyQuery query=new FuzzyQuery(new Term(\,\习精\)); }

默认是在搜索文本相差2个字符都可以。最后一个参数可以改变(取值范围0,1,2表示允许我的查询条件的值,可以错误几个字符)。

FuzzyQuery query=new FuzzyQuery(new Term(\,\习精\),0);0表示不允许错误,这样必须和搜索文本一样才可以。

9.7 短语查询PhraseQuery

// 短语查询 @Test

public void testPhraseQuery() {

PhraseQuery phraseQuery = new PhraseQuery(); // // 对应的查询字符串为:title:\框架\

// phraseQuery.add(new Term(“title”, “lucene”), 0); // 0表示第 // phraseQuery.add(new Term(\框架\ // 对应的查询字符串为:title:\框架\

1个位置

phraseQuery.add(new Term(\, \)); phraseQuery.add(new Term(\, \框架\));

phraseQuery.setSlop(5); // 之间的间隔最大不超过5个词,范围越大,匹配

的越多,性能也就越慢。

}

public void add(Term term, int position) public void setSlop(int s)

例:add( new Term(“name”, “lucene”, 1); add(new Term(“name”, “教程”, 3);

代表搜索的是“Lucene ? 教程”,?表示中间隔一个词。 setSlop(2);

代表这两个词中间可以最多隔2个词

9.8 布尔查询BooleanQuery

// 布尔查询 @Test

public void testBooleanQuery() {

BooleanQuery booleanQuery = new BooleanQuery(); // booleanQuery.add(query, Occur.MUST); // 必须满足 // booleanQuery.add(query, Occur.MUST_NOT); // 非

// booleanQuery.add(query, Occur.SHOULD); // 多个SHOULD一起用是

OR的关系

// // 对应的查询字符串为:+*:* -id:{5 TO 15] // // 对应的查询字符串为:*:* NOT id:{5 TO 15] // booleanQuery.add(query1, Occur.MUST); // booleanQuery.add(query2, Occur.MUST_NOT); }

Query query1 = new MatchAllDocsQuery();

Query query2 = NumericRangeQuery.newIntRange(\, 5, 15, false,

true);

public void add(Query query, Occur occur)

Occur 用于表示布尔查询子句关系的类,包括:

Occur.MUST,Occur.MUST_NOT,Occur.SHOULD。

1, MUST和MUST:取得连个查询子句的交集。

2, MUST和MUST_NOT:包含MUST并且查询结果中不包含MUST_NOT的检索结果。 3, SHOULD与SHOULD,表示“或”关系,最终检索结果为所有检索子句的并集。

一般不单独使用,因为单独就不应使用BooleanQuery了。

使用时注意:

1, 单独使用MUST_NOT:无意义,检索无结果。(也不报错) 2, 单独使用SHOULD:结果相当于MUST。

3, MUST_NOT和MUST_NOT:无意义,检索无结果。(也不报错)

4, SHOULD和MUST_NOT: 此时SHOULD相当于MUST,结果同MUST和MUST_NOT。 5, MUST和SHOULD:此时SHOULD无意义,结果为MUST子句的检索结果。

10 高亮

对查询出来的关键字进行高亮。

10.1 高亮所需的jar包

highlighter\\lucene-highlighter-4.4.0.jar memory\\lucene-memory-4.4.0.jar

10.2 高亮的特点

1、高亮将文本生成一段摘要,用于搜索,并把摘要中的关键词高亮显示 2、摘要的大小可以配置,默认100个字符。

3、文本实现高亮的效果,就是在需要高亮的文字前后加前缀与后缀(类似Html)

10.3 实现高亮效果的代码

// 创建高亮器,指定html Formatter formatter = new SimpleHTMLFormatter(\

class='kw'>\, \);

// 使用高亮器:对content属性值进行摘要并高亮 String text =

//query里面条件,条件里面有搜索关键字

Scorer scorer = new QueryScorer(query);

//设定高亮显示的格式,也就是对高亮显示的词组加上前缀后缀

Highlighter highlighter = new Highlighter(formatter, scorer); //设置返回摘要的长度...

highlighter.setTextFragmenter(new SimpleFragmenter(20));

highlighter.getBestFragment(LuceneUtil.getAnalyzer(), \, document.get(\));

// 如果进行高亮的属性值中没有要搜索的关键字,则返回null if (text != null) {

document.getField(\).setContent(text); }

11 爬虫

java UrlConnect或者httpClient来实现 rss:信息聚合

每个网站都提供一个链接,都遵守相同的标准,通过这个链接可以把新闻抓取过来。 遵守robots(标准网络爬虫协议)

12 solr

12.1 solr简介

采用Java开发,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。

Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http G SolrJ操作提出查找请求,并得到XML格式的返回结果。

12.2 solr与lucene的关系

? Lucene是一套信息检索工具包,但并不包含搜索引擎系统,它包含了索引结构、读

写索引工具、相关性工具、排序等功能,因此在使用Lucene时你仍需要关注搜索引擎系统,例如数据获取、解析、分词等方面的东西。

? 首先Solr是基于Lucene做的 , Solr的目标是打造一款企业级的搜索引擎系统,因

此它更接近于我们认识到的搜索引擎系统,它是一个搜索引擎服务,通过各种API可以让你的应用使用搜索 服务,而不需要将搜索逻辑耦合在应用中。而且Solr可以根据配置文件定义数据解析的方式,更像是一个搜索框架,它也支持主从、热换库等操作。还添加了高亮、facet等搜索引擎常见功能的支持 12.3 solr的搭建运行

? 1、解压solr-4.6.0.zip到你想到存放的路径,比如:e:/solr ? 2、cmd打开命令行窗口,进入E:/solr/example目录 ? 3、执行命令:java -jar start.jar

?

4、通过第三步以后,系统会启动solr自带的jetty服务器,http://localhost:8983/solr/便可访问solr。 ? 此时,solr已成功启动 通过


lucene全文检索精华(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:帮助孩子正确面对挫折与失败

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: