lucene的Compass总结1

lucene搜索引擎与数据库like查询的比较java

1>在数据量比较大查询字段比较多的状况下,若是采用数据库like查询,性能比较差,而采用lucene来查询,性能相对like查询要好sql

2>若是采用lucene进行搜索,搜索到的结果相关度比较高,面具把匹配度高的记录排在最前面,而数据库的like语句查询只会查询有关键字的记录,其内容相关度不高,而且不能实现把匹配度高的记录排在最前面数据库

3>采用lucene进行搜索,可以进行高亮显示,而数据库的sql语句查询作不到这一点编程

 lucene的使用:
  1>创建索引
  2>查询索引
   会用到一个分词技术
 分词原理:一元分词(一个字一个字的分)/二元分session

词(二个字二个字的分)/字典分词(匹配度最高,效果最好,app

必须有字典,paoding分词器)
lucene 封装框架:Compass API(面向对象操做索引 Object 框架

search engine/mapping,对象搜索引擎映射框架)[OSEM产post

品]性能

Compass的使用
 1>设置实体,,并映射为搜索实体(@Searchale-->把该类定义为搜索实体,该实体与索引中的document进行映射)
 2>设置标识属性(@SearchableId-->定义该属性为搜索实体的标识属性,由于映射到doucment中的id字段;通@SearchProperty(name="XXX")注解定义某个属性跟document中的某个字段进行映射,name="XXX"表示document中的字段名称,index属性(index=Index.NOT_ANALYZED:不分词,但创建索引;index=Index.ANALYZED:分词并创建索引))ui

Compass只有添加/删除功能

 

使用可编程方式配置Compass,和sessionFactory差很少,同样是获得一个compassFactory
public Compass cf;
 cf=new CompassAnnotationsConfiguration().setSettion("CompassEnvitronment.CONNECTION","file://XXX")
//指定索引文件存放的目录;CompassEnvitronment.CONNECTION,"ram://XXX"表示把索引文件存放到内存中
.setSettion("compass.engine.analyzer.default.type","net.paoding.analysis.analyzer.PaodingAnalyzer")
//Compass中默认使用的中文分词器是一元分词器,更改默认字典分词器
.setSettion("compass.engine.highlighter.default.formatter.simple.pre","<font color='red'>")
.setSettion("compass.engine.highlighter.default.formatter.simple.post","</font>")
.addScan("com.eason.entity")
//表示自动搜索指定目录下的搜索实体(@Searchale)
.buildCompass();
 使用compass CompassSession session=cf.openSession(); CompassTransaction ct=session.beginTransaction(); session.beginTransaction();
CompassTransaction session.save(Entity);//保存搜索实体到索引文件中去Compass中能够实现增量索引, 当保存实体时,实体是在原有的数据上增长上去的 (这里有个专业解释叫作"实时增量")
session.commit(); 
session.close(); 
com.close();
相关文章
相关标签/搜索