likes
comments
collection
share

Meilisearch轻量全文搜索引擎java快速入门操作

作者站长头像
站长
· 阅读数 18

1.前言

Meilisearch是个轻量级的搜索引擎,我试了下几乎不需要配置超简单,用RUST构建的响应速度超快还有个简单的前端页面。提供了多种语言的API和CUR进行处理。官网可以看下文档用你顺手的语言跑下。

2.win下的安装

  1. 环境变量PATH配置:程序的路径
  2. 配置db位置:MEILI_DB_PATH
  3. 配置APIKEY:MEILI_MASTER_KEY (我这里是直接运行程序控制台打印的)
  4. 执行:meilisearch -V (注意改文件名)
  5. 执行:meilisearch
  6. 下面是配置的截图 Meilisearch轻量全文搜索引擎java快速入门操作

Meilisearch轻量全文搜索引擎java快速入门操作

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效果图

Meilisearch轻量全文搜索引擎java快速入门操作

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
评论
请登录