Lucenex 2.0 发布,努力让搜索更简单

lucenex

基于JDK 1.8 & lucene 8.x 的搜索框架、在不影响原本性能的同时、提升80%的开发效率、降低70%的开发难度!!!

文档

简介:https://gitee.com/Myzhang/luceneplus/blob/master/README.md

javadoc:https://apidoc.gitee.com/Myzhang/luceneplus

Demo:https://gitee.com/Myzhang/luceneplus/tree/master/src/test/java/com/ld/lucenex/demo

入门

创建lucene数据源

  1.         new LuceneX(new LuceneXConfig() {
  2.             @Override
  3.             public void configLuceneX(BaseConfig me) {
  4.                 me.add("d:/","test",Empty.class);
  5.             }
  6.         });

定义实体类

  1. import com.ld.lucenex.field.FieldKey;
  2. import com.ld.lucenex.field.LDType;
  3.  
  4. public class Empty{
  5.  
  6.     @FieldKey(type = LDType.IntPoint)
  7.     private int id;
  8.     @FieldKey(type = LDType.StringField)
  9.     private String name;
  10.     @FieldKey(type = LDType.TextField,highlight = true)
  11.     private String text;
  12.  
  13.     public int getId() {
  14.         return id;
  15.     }
  16.  
  17.     public void setId(int id) {
  18.         this.id = id;
  19.     }
  20.  
  21.     public String getName() {
  22.         return name;
  23.     }
  24.  
  25.     public void setName(String name) {
  26.         this.name = name;
  27.     }
  28.  
  29.     public String getText() {
  30.         return text;
  31.     }
  32.  
  33.     public void setText(String text) {
  34.         this.text = text;
  35.     }
  36. }

添加索引

  1.         List<Empty> empties = new ArrayList<>(10);
  2.         for (int i=0;i<10;i++){
  3.             Empty empty = new Empty();
  4.             empty.setId(i);
  5.             empty.setName("新闻");
  6.             empty.setText("8月29日,2019世界人工智能大会在上海开幕,本届大会以“智联世界,无限可能”为主题,展示包括中国在内各国最新的AI产品和技术。在本届大会上,除了各国展出的最新AI技术和产品外,由华为、寒武纪、依图等国内企业自主研发的人工智能芯片组成的AI芯片墙更是受到参观者的关注。图为微软带来了智能菜品识别系统,把食物放在收银检测区,便能自觉识别价格。更厉害的是,系统还能给出营养分析报告,例如热量、脂肪、碳水物、蛋白质等含量。");
  7.             empties.add(empty);
  8.         }
  9.         ServiceImpl<Empty> basisService = ServiceFactory.getService(ServiceImpl.class);
  10.         basisService.addObjects(empties);

查询索引

  1.         ServiceImpl<Empty> basisService = ServiceFactory.getService(ServiceImpl.class);
  2.         Empty searchOne = basisService.searchOne(new TermQuery(new Term("name","百度一下")));

高亮显示条件

  • 字段表明 highlight = true,并且 type = LDType.TextField

  1.     @FieldKey(type = LDType.TextField,highlight = true)
  2.     private String text;
  • 必须调用searchList 并且返回类型是

实时索引条件

  • 必须调用ServiceImpl内置的添加/更新删除方法

如何自定义 Service 查询接口

  1. import com.ld.lucenex.service.ServiceImpl;
  2.  
  3. public class DemoService<T> extends ServiceImpl<T> {
  4.     public DemoService(String sourceKey) {
  5.         super(sourceKey);
  6.     }
  7. }

如何与其他web/非web框架集成

  • 只要在项目启动的时候 创建lucene数据源即可

更新日志

v2.0

  • 大量改动与之前版本不兼容

  • 新增关闭保护,jvm停止前提交所有队列里的数据,保证数据的完整性

  • 新增 IndexSource 类代表每一个数据源

  • 优化 LuceneX 统一资源管理

  • 新增 MyDocument 代替 Object 转 Document 方法

  • 新增 ServiceImpl

  • 新增 ServiceFactory

  • 升级 lucene 为 8.2.0

v1.4

  • 新增 searchOneDoc 方法

  • 新增 SimpleExample 用例

v1.3

  • 增加单个对象添加索引

  • 同步实时索引

v1.2

  • 增加jfinal、springboot、servlet等集成插件

  • 精简代码

  • 增加两个实用方法

  • 删除2个依赖

  • 适配 javabean and map and fastjson 直接添加

  • 自动提交&关闭数据、避免丢失数据或手动提交

v1.1

  • 补充大量文档注释

  • 精简&优化代码

  • 修复一个错误的Demo

v1.0

  • 去除第三方分词依赖&无用的Jar

  • 使用cglib 动态代理创建 Service

  • 新增拦截器

  • 添加更新 默认异步

亮点

  • 轻 ~ 不足千行

  • 简 ~ 零配置项

  • 全 ~ 内置丰富

  • 易 ~ 入门简单

  • 快 ~ 接近原生

  • 稳 ~ 坚如磐石

  • 展 ~ 插件扩展

特点

  • 原声Lucene 用法

  • 注解式声明字段

  • 多库自动切换

  • 自带管理资源创建于释放

  • 自带高性能近实时索引

  • 可持续扩展的Service 接口设计

  • 内置丰富常用接口

  • 可直接添加Java对象与Map集合 无需手动创建 Document

  • 支持操作回退

  • 可自定义分词器

  • 异常退出数据保护

社区

  • QQ群号:475349334

安装

  1. 下载后使用Maven打包成jar


评论区

lyh061619

2019-08-31 22:27

开发使用简便,开发效率高,好东西必须顶。

山东小木

2019-08-31 22:55

用ES更简单

jiren

2019-09-02 08:03

北流家园网

2019-09-02 08:36

一直期待更新

张现伟

2019-09-02 14:41

@lyh061619 感谢支持哦

张现伟

2019-09-02 14:41

张现伟

2019-09-02 14:42

@山东小木 比不了es 和 solr 专注于小项目使用 功能并不多,可以自己扩展

cs3230524

2019-10-16 11:37

作者你好,实体类不能直接用 jfinal 的 model 吗?得自己定义?

张现伟

2019-10-16 20:26

@cs3230524 可以用 但是还是需要一个 类 来定义配置

热门分享

扫码入社