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();