Meilisearch轻量全文搜索引擎java快速入门操作
1.前言
Meilisearch是个轻量级的搜索引擎,我试了下几乎不需要配置超简单,用RUST构建的响应速度超快还有个简单的前端页面。提供了多种语言的API和CUR进行处理。官网可以看下文档用你顺手的语言跑下。
2.win下的安装
- 环境变量PATH配置:程序的路径
- 配置db位置:MEILI_DB_PATH
- 配置APIKEY:MEILI_MASTER_KEY (我这里是直接运行程序控制台打印的)
- 执行:meilisearch -V (注意改文件名)
- 执行:meilisearch
- 下面是配置的截图
3.数据传输和特性以及一些设置
添加数据是JSON格式进行处理的。
对于数据尽量要有ID字段,没有的话需要指定primaryKey(我有个疑惑没弄明白在新增写了的)
查询结果是java.util.ArrayList<java.util.HashMap<String, Object>>
注意:对于要过滤和排序的字段需要进行指定操作,不然不生效
支持中文
支持分页(下面查询那里有实例)和搜索数据的高亮显示(我没试),看网上说还支持容错但是我没测试。
没有对搜索的数据有打分机制
//排序
index.updateSortableAttributesSettings(new String[]{"id"});
//过滤 支持一些表达式
//`=`, `!=`, `>=`, `>`, `<=`, `<`, `IN`, `NOT IN`, `TO`, `EXISTS`, `NOT EXISTS`, `IS NULL`, `IS NOT NULL`, `IS EMPTY`, `IS NOT EMPTY`, `CONTAINS`, `NOT CONTAINS`, `_geoRadius`, or `_geoBoundingBox`
//CONTAINS 需要单独开启 https://github.com/orgs/meilisearch/discussions/763
index.updateFilterableAttributesSettings(new String[]{"id","title"});
4.增删改查
首先创建索引
Client client = new Client(new Config("", ""));
// An index is where the documents are stored.
Index index = client.index("movies");
4.1增加数据
这里所谓的documents是个JSON串。
index.addDocuments(documents);
index.addDocuments(documents,"id");
按照文档上说的后面的id是primayKey,但是没生效不知道什么原因。然后我用下面的方法指定或者更新primaryKey都没生效,这里我没搞明白不是知道是有ID列的默认为primayKey(因为我修改数据的第二种方式没生效,还是说第二种方式是针对没id需单独指定key进行的对应处理),知道的可以给我留言。
TaskInfo t1=client.createIndex("movies", "id");
TaskInfo t2=client.updateIndex("movies", "title");
Index index = client.index("movies");
//上面两种方式都没生效
System.out.println("primaryKey:"+index.getPrimaryKey());
官方demo效果图
4.2删除数据
//删除针对id的
index.deleteDocument("5");
//删除过滤的时候filter需要先添加
index.deleteDocumentsByFilter("id = 2");
//删除所有数据
index.deleteAllDocuments();
4.3改数据
第一个完整的数据直接识别为第四条数据和id有关系吧,相同列直接更新没有则添加
第二种方式更改根据primaryKey的因为我上面设置一致没成功,所以这个测试没成功
//更新 根据ID 第一种
String updateTest=new JSONObject().put("id", "4").put("title", "更新操作2").put("addParam","test1").toString();
index.updateDocuments(updateTest);
//第二种没生效
index.updateDocuments(new JSONObject().put("title", "更新操作3").put("addParam","test3ss").toString(),"4");
4.4查数据
第一种直接查询
第二种加些过滤和排序(注意这里需要设置的列才会生效)
//第一种
SearchResult searchResult=index.search("Drama Adventure");
System.out.println(searchResult.getHits());
//第二种可以加过滤和排序
SearchRequest searchRequest = new SearchRequest("Drama AND Adventure");
//查询列 搜索 AND OR 模糊搜索
searchRequest.setFilter(new String[]{"title IN ["中文测试","Philadelphia"]"});
searchRequest.setSort(new String[]{"id:desc"});
Searchable searchable =index.search(searchRequest);
//返回页大小 分页操作处理
searchRequest.setOffset(0);
searchRequest.setLimit(1);
System.out.println(searchable.getHits());
转载自:https://juejin.cn/post/7399453056973029414