1.什么时manticore search
Manticore Search 是一个使用 C++ 开发的高性能搜索引擎,创建于 2017 年,其前身是 Sphinx Search 。Manticore Search 充分利用了 Sphinx,显着改进了它的功能,修复了数百个错误,几乎完全重写了代码并保持开源。这一切使 Manticore Search 成为一个现代,快速,轻量级和功能齐全的数据库,具有出色的全文搜索功能。Manticore Search目前在GitHub收获5.7k star,拥有大批忠实用户。同时开源者在GitHub介绍中明确说明了该项目是是Elasticsearch的良好替代品,在不久的将来就会取代ELK中的E。
image (3).png
github的地址
https://github.com/manticoresoftware/manticoresearch
2.优势
在特殊场景的情况下,他对比现有的解决方案的对比
image.png
3.如何安装
github上给了多种安装方式,由于我这里使用的时window,所以使用的是window安装
window安装官方文档
https://manual.manticoresearch.com/Installation/Windows
下载安装
image (10).png
安装完后,打开cmd(一定要以管理员的方式运行cmd,不然权限不足)
输入
D:\Manticore\bin\searchd.exe --install --config D:\Manticore\etc\manticoresearch\manticore.conf --servicename Manticore
这里是我安装的路径,实际以自己的路径为主
image (4).png
启动服务
image (5).png
在mysql bin目录下指定 manticore地址
mysql -P9306 -h127.0.0.1
image (6).png
4.java编写用例
首先我们使用的是maven,我们要引入最新的manticoresearch的client的包
<dependency>
<groupId>com.manticoresearch</groupId>
<artifactId>manticoresearch</artifactId>
<version>3.3.0</version>
<scope>compile</scope>
</dependency>
引入maven依赖后我们开始写用例,manticoresearch官方文档https://manual.manticoresearch.com/Introduction
例如创建表
ApiClient defaultClient = Configuration.getDefaultApiClient();
//你的manticoresearch服务器地址
defaultClient.setBasePath("http://127.0.0.1:9308");
UtilsApi utilsApi = new UtilsApi(defaultClient);
try {
List<Object> list = utilsApi.sql("CREATE TABLE forum(title text, content text, author_id int, forum_id int, post_date timestamp)", true);
// Create SearchRequest
System.out.println(JSONObject.toJSONString(list));
} catch (ApiException e) {
System.err.println("Exception when calling SearchApi#search");
System.err.println("Status code: " + e.getCode());
System.err.println("Reason: " + e.getResponseBody());
System.err.println("Response headers: " + e.getResponseHeaders());
e.printStackTrace();
}
其中地址可以在manticoresearch的安装目录的\etc\manticoresearch下的manticore.conf 里面查看
image (7).png
创建表后,我们还可以根据sql的show tables查询我们创建的表
ApiClient defaultClient = Configuration.getDefaultApiClient();
//你的manticoresearch服务器地址
defaultClient.setBasePath("http://127.0.0.1:9308");
UtilsApi utilsApi = new UtilsApi(defaultClient);
try {
List<Object> list = utilsApi.sql("SHOW TABLES", true);
// Create SearchRequest
System.out.println(JSONObject.toJSONString(list));
} catch (ApiException e) {
System.err.println("Exception when calling SearchApi#search");
System.err.println("Status code: " + e.getCode());
System.err.println("Reason: " + e.getResponseBody());
System.err.println("Response headers: " + e.getResponseHeaders());
e.printStackTrace();
}
结果如下
image (8).png
插入数据,我们可以根据sql插入,也可以根据它给的api插入
ApiClient defaultClient = Configuration.getDefaultApiClient();
//你的manticoresearch服务器地址
defaultClient.setBasePath("http://127.0.0.1:9308");
IndexApi indexApi = new IndexApi(defaultClient);
try {
InsertDocumentRequest newdoc = new InsertDocumentRequest();
HashMap<String,Object> doc = new HashMap<String,Object>(){{
put("title","第一个");
}};
newdoc.index("forum").id(1L).setDoc(doc);
SuccessResponse sqlresult = indexApi.insert(newdoc);
System.out.println(JSONObject.toJSONString(sqlresult));
} catch (ApiException e) {
System.err.println("Exception when calling SearchApi#search");
System.err.println("Status code: " + e.getCode());
System.err.println("Reason: " + e.getResponseBody());
System.err.println("Response headers: " + e.getResponseHeaders());
e.printStackTrace();
}
插入完后可以使用提供的api进行查询
ApiClient defaultClient = Configuration.getDefaultApiClient();
//你的manticoresearch服务器地址
defaultClient.setBasePath("http://127.0.0.1:9308");
SearchApi searchApi = new SearchApi(defaultClient);
try {
SearchResponse searchResponse = searchApi.search(new SearchRequest().index("forum"));
System.out.println(JSONObject.toJSONString(searchResponse));
} catch (ApiException e) {
System.err.println("Exception when calling SearchApi#search");
System.err.println("Status code: " + e.getCode());
System.err.println("Reason: " + e.getResponseBody());
System.err.println("Response headers: " + e.getResponseHeaders());
e.printStackTrace();
}
结果如下
image (9).png
网友评论