如果大家对文章内容有不理解的地方,尽情留言或QQ(1357208561) 讨论。让大家共同进步。
————tigers20010
3.排序(默认相关度排序)
a) 实验相关度排序,得分是在搜索时算出来的。
b) 影响区域
i. 整个文档
ii. 某个字段
1. 建立索引时,影响它的排名,创建QueryParser时指定“MultiFieldQueryParser(String[] fields, Analyzer analyzer, Map boosts)”中第三个参数为“new HashMap<String, Float>().put(String fieldname, float fraction)”提升对应字段内容的排名。一般网站内部搜索会将标题部分的内容提升,以至于标题内容的排名大于帖子内容或回复的排名。
2. 搜索时,标题与内容的含量排名,TopDoc有一个score属性,它是根据文档中关键字的数量,记录文档的得分。
c) 按指定的字段进行排序,就是在搜索时,指定的字段。
d) Sort排序器,由类Sort实现。
Sort sort = new Sort();
sort.setSort(SortField field);
indexSearcher.search(query, null, 100, sort);
|
4.过滤器
在查询时添加一个过滤器,过滤掉查询后不想要的内容,由Filter接口实现。
String lower = NumberTools.longToString(3);
String upper = NumberTools.longToString(6);
Filter filter = new RangeFilter("id", lower, upper, true, false);
indexSearcher.search(query, filter, 100);
|
在lucene中使用数值、日期数据时,必须使用NumberTools和DateTools。前后必须统一,比如使用longToString将Long转换为String,那么也必须使用stringToLong将String转换为Long。
5.搜索,Query的子类对应各种查询:
1) TermQuery,关键词查询:
Term term = new Term("context", "加油");
Query query = new TermQuery(term);
indexSearcher.search(query, null, 100);
|
2) RangeQuery,范围查询:
Term lower = new Term("content", NumberTools.longToString(3));
Term upper = new Term("content", NumberTools.longToString(10));
Query query = new RangeQuery(lower, upper, false/*包含边界*/);
indexSearcher.search(query, null, 100);
|
3) WildcardQuery,通配符查询:
Term term = new Term("context", "加?");//?匹配任意一个字符,*代表任意多个字符。
Query query = new TermQuery(term);
indexSearcher.search(query, null, 100);
indexSearcher.search(query, null, 100);
|
4) PhraseQuery,短语查询:
PhraseQuery phraseQuery = new PhraseQuery();
phraseQuery.add(new Term("context", "中国人民"));
phraseQuery.add(new Term("context", "加油"));
phraseQuery.setSlop(5); // 指定关键词之间间隔的字符的最大数量
indexSearcher.search(query, null, 100);
|
5) BooleanQuery,布尔查询:
Query query1 = new TermQuery(new Term("context", "中国人民"));
Query query2 = new TermQuery(new Term("context", "加油"));
BooleanQuery boolQuery = new BooleanQuery();
boolQuery.add(query1, Occur.MUST);
boolQuery.add(query2, Occur.SHOULD);//Occur的常量值:MUST、SHOULD、MUST_NOT。
indexSearcher.search(query, null, 100);
|
注意:经过分词器的所有字母,无论是添加索引还是查询,都会被转换为小写的。但上边这些查询类没有经过分词器,如果查询关键里有大写字母,将查询不到匹配的结果。所以在使用上边这些查询类时,查询文本中的字母全部为小写。我们之前使用的查询是通过QueryParser切分出查询关键字,所以使用QueryParser可以不注意大小写问题。
二、Compass
Compass是lucene的框架,它与hibernate极其相似(但不具有hibernate那些高级功能,比如缓存技术)。汤兄弟做的好,因为学习lucene之前的课程正是hibernate,他将hibernate与compass对比了一下,使我们学习compass更加容易了。OK,我总结一下。
1.hibernate与compass
|
hibernate
|
compass
|
配置方式
|
1.编程方式:
Configuation cfg = new Configu...();
cfg.set...();
...
2.配置文件:
//默认配置,文件名为“hibernate.cfg.xml”
Configuation cfg= new Configu...();
//指定文件名(文件名可变更)
//cfg.configure("hibernate.cfg.xml");
|
1.编程方式:
CompassConfiguation cfg = new CompassConf...();
cfg.set("key","value");
...
2.配置文件
//默认配置,文件名为“compass.cfg.xml”
cfg.configure();
//指定文件名(文件名可变更)
cfg.configure("hibernate.cfg.xml");
|
配置文件
|
XML文件
注解
|
XML文件
注解
|
2.compass中的注解配置
package cn.itcast.cc.compass;
import org.compass.annotations.Index;
import org.compass.annotations.Searchable;
import org.compass.annotations.SearchableId;
import org.compass.annotations.SearchableProperty;
import org.compass.annotations.Store;
@Searchable
public class Article {
private Long id;
private String title;
private String content;
@SearchableId
public Long getId() { return id;}
@SearchableProperty(store = Store.YES, index = Index.ANALYZED, boost = 2.0F, excludeFromAll = ExcludeFromAll.YES/*这个属性的内容被查询忽略*/)
public String getTitle() {return title;}
@SearchableProperty(store = Store.YES, index = Index.ANALYZED)
public String getContent() {return content;}
public void setId(Long id) {this.id = id;}
public void setTitle(String title) {this.title = title;}
public void setContent(String content) {this.content = content;}
}
|
XML配置文件,可以查看“compass-2.2.0-M2/docs/reference/html_single/index.html”手册,内容较多。
3.compassAPI
CompassConfiguration cfg = new CompassConfiguration();
cfg.setConnection("./indexPath/");// 连接信息
cfg.addClass(Article.class);// 声明映射信息
Compass compassSessionFactory = cfg.buildCompass();
CompassTransaction tx = session.beginTransaction();
session.create(article);
tx.commit();
session.close();
|
其他API:
session.find(String arg0);
session.save(Object arg0);
session.delete(Class arg0, Object arg1);
|
分享到:
相关推荐
基于Lucene的Compass框架详解-Java 一、Compass框架概述 Compass是一个高性能的开源Java搜索引擎框架,旨在简化应用程序与搜索引擎之间的集成过程。它不仅利用了顶级的Lucene搜索引擎的强大功能,还融合了诸如...
### 基于Java的Luncene的Compass框架说明使用技术文档 #### 一、原理描述 Compass是一款优秀的开源Java搜索引擎框架,它能够帮助应用程序实现更为强大的搜索引擎语义能力。Compass依赖于顶级的Lucene搜索引擎,并...
网上MMAnalyzer资源太少了,大多数初学者都会少导入JAR包,并且网上只有 je-analysis-MMAnalyzer的例子,而没有依赖包lucene-core-2.4.1.jar je-analysis-1.5.3.jar以及 luncene-heghlighter-2.4.1.jar
在构建一个自定义搜索引擎的过程中,Luncene 2.0 和 Heritrix 是两个关键的组件。Luncene 是一个流行的全文检索库,而 Heritrix 是一款强大的网络抓取工具,它们共同为搜索引擎的搭建提供了坚实的基础。下面将详细...
Luncene的API,详细接受了Luncene的使用方法
### Compass技术文档详解 #### 一、原理描述 Compass是一个高级开源的Java搜索引擎框架,旨在简化应用程序与搜索引擎之间的集成过程。它通过结合强大的Lucene搜索引擎以及流行的应用框架如Hibernate和Spring,使得...
luncene in action中文版 doc格式
**全文搜索Lucene.Net** Lucene.Net是一款开源的全文搜索引擎库,它为.NET开发者提供了强大的文本检索功能。作为Apache Lucene项目的.NET版本,它在.NET Framework上实现了原生Lucene的功能,使得.NET开发者也能...
Apache Lucene是一个开源全文搜索引擎库,它为开发者提供了在各种应用程序中实现高级搜索功能所需的工具。Lucene API(Application Programming Interface)是这个库的核心部分,允许程序员与Lucene进行交互,构建...
标题中的“luncene jar包Java专用”指的是专门为Java环境设计的Lucene库,以.jar文件形式提供,便于开发者集成到他们的项目中。这个库包含了所有必要的类和方法,使得开发人员能够构建自己的搜索引擎应用,对文本...
luncene 简单的开原项目
ASP.NET与Lucene.NET是两个在开发领域中广泛使用的开源技术。ASP.NET是Microsoft推出的用于构建Web应用程序的框架,而Lucene.NET则是一个强大的全文搜索引擎库,被许多开发者用来为他们的应用添加高效的搜索功能。...
#### 概述 Lucene是一款高性能、全功能的文本搜索引擎库,被广泛应用于多种场景下的全文检索应用开发中。... #### Lucene基础概念 在深入了解如何处理特定类型的文档之前,我们需要先了解几个基本概念: ...
标题与描述均为“luncene in action 003”,但是需要注意的是正确的拼写应为“Lucene in Action”,这是一本介绍Apache Lucene的书籍。由于提供的部分内容仅包含了一些重复的试读版本声明及网址,并未提供具体的章节...
在构建一个自定义搜索引擎的过程中,Luncene 2.0 和 Heritrix 是两个关键的开源工具。Luncene 是一款强大的全文搜索引擎库,而 Heritrix 是一个网络抓取工具,它们共同为创建一个完整的搜索解决方案提供了基础。 **...
在给定的压缩包文件“luncene.jar”中,包含了三个重要的Lucene组件:lucene-core-3.0.3.jar、lucene-highlighter-3.0.1.jar和lucene-memory-3.0.1.jar,这些组件是构建高效搜索引擎的基础。 首先,我们来看一下`...
#### 二、Lucene实现全文检索的流程 **2.1 索引流程** - **采集数据**: 获取需要被索引的原始文档数据。 - **构建文档对象**: 将原始数据转化为Lucene可以处理的对象形式。 - **分析文档**: 对文档进行分词处理,...
CSS与JavaScript JavaScript JQuery基础与实战 BootStrap响应式页面开发 mysql回顾及多表操作 jdbc回顾 xml和Tomcat JavaWeb的核心技术 JDBC加强及案例 ...luncene/solr使用入门 redis 淘淘商城项目实战
根据提供的标题、描述、标签以及部分内容来看,似乎存在一定的误解,因为这些信息并没有提供关于“Lucene in Action002”具体内容的有效信息。“Lucene in Action”通常是一本书的名称,该书深入介绍了Apache Lucene...