总结两点:① 对搜索哀求并未十分苛刻,② 且数据规模处于中、小规模;
(3)特性实时搜索:也叫“即时搜索”。当您仍在输入查询时,结果将被交付。只要您在搜索框中输入额外的文本,显示的结果就会实时变动。超干系:Meilisearch的默认关联规则旨在供应零设置的直不雅观搜索体验。它们可以定制,以确保您的数据集得到完美的结果。缺点宽容:Meilisearch不会让错别字毁坏你的搜索体验,它总是能找到你想要的结果。阅读更多关于错别字容错的指南。同义词:Meilisearch在行动中与蝙蝠侠和小丑定义为同义词,定义同义词可以让您打造一个更有针对性、更直不雅观的搜索体验。命中高亮:突出显示查询条件,以便匹配弹出到眼睛。用户不须要阅读全体文本来查找匹配。过滤器:Meilisearch许可您定义过滤器,以便您可以根据用户定义的条件过滤结果。分面搜索:许可您对搜索结果进行分类,并构建直不雅观的导航界面。排序:在查询时对搜索结果进行排序,并让用户选择他们想首先看到的结果类型。占位符搜索:短语搜索:如果将搜索词用双引号(")括起来,Meilisearch将只返回包含这些词的文档。这让用户可以选择进行更精确的搜索查询。短语搜索在探求单个结果时特殊有用,例如搜索ISBN的一本书。也可以将短语搜索与Meilisearch的基本语法相结合,这样只对查询的部分进行严格匹配。API密钥管理:Meilisearch许可你通过利用API密钥来保护你的实例。API键使您可以掌握哪些用户可以访问哪些索引、路由和端点。(API密钥由 主密钥 管理。当你在第一次启动时设置一个主密钥时,Meilisearch天生两个API密钥,称为 默认搜索API密钥 和 默认管理API密钥。【security】)多措辞支持:Meilisearch多措辞! 我们的目标是支持我们环球社区中所代表的每一种措辞。
Linux & Mac OS 的一键安装和启动的命令:

# 下载curl -L https://install.meilisearch.com | sh# 启动./meilisearch# 2.二合一命令curl -L https://install.meilisearch.com | sh ./meilisearch
如果须要将所有的路由进行保护,那么则可以在启动实例时,可以选择设置主密钥(密钥可以自己天生,例如UUID等其他的MD5加密)
# 不添加密钥的用法$ ./meilisearch# 添加密钥的用法 (master-key :值是随意的,建议设置比较繁芜的密码用于生产环境)$ ./meilisearch --master-key=KpxaSzakqwDZzpQ66DLr3VvcNE0E6YDKijyMZLLHTAUuxphwPYt2IXPhz4i4
Postman 要求示例(须要 master-key 才能访问的示例)
如上图,如果在启动时设置了 --master-key 参数,那么所有API都须要在header中带上 X-Meili-API-Key参数,对应的值,便是--master-key的值。
(2)填充数据① 获取官方供应的默认案例JSON数据建议:最好将数据文件和meilisearch 实行文件命令放在同一目录下。否则,你须要进入到你自己指定的 meilisearch 的数据目录中。
# 案例数据1:电影JSON文件数据 movies.json$ wget https://docs.meilisearch.com/movies.json# 案例数据2:地址JSON数据 meteorites.json$ wget https://docs.meilisearch.com/meteorites.json
② 将下载到本地的JSON数据导入到 Meilisearch 中;
# 导入movie数据到meilisearch中curl \ -X POST 'http://localhost:7700/indexes/movies/documents'\ -H 'Content-Type: application/json' \ --data-binary @movies.json# 导入meteorites.json 到 meilisearch 中(把稳修正索引为 meteorites)curl \ -X POST 'http://localhost:7700/indexes/meteorites/documents'\ -H 'Content-Type: application/json' \ --data-binary @meteorites.json
③ 验证数据是否成功导入
(3)Meilisearch 导入数据用法
# 类似导入数据的用法curl \ -X POST 'http://localhost:7700/indexes/movies/documents' \ -H 'Content-Type: application/json' \ --data-binary @movies.json
三、索引 - 增编削查
把稳:Meilisearch 绝大部分的操作时 异步的。(API要求会添加到一个行列步队中,一个时候内只能有一个要求进程实行添加到行列步队的操作)
(1)添加操作# 把稳:下方的写法类似 Eaticsearch的 DSL语句写法,# 可以转换成 CURL写法直接在 命令行中要求对应数据,也可以通过 Meilisearch 的插件直接粘贴此命令来添加POST http://192.144.228.170:7700/indexes{ "uid" : "product", "primaryKey": "id"}# 注:uid是必需的字段
【小建议】有搭建过 ELK 的小伙伴知道,Kibana 是个接入平台,可以考试测验利用 Kibana 接入 Meilisearch 做可视化查询;(浏览器的插件 Elasticsearch-Head.ctx 插件可以试试接入 Meilisearch 用来练习 Meilisearch 干系的操作)
(2)查询所有索引# DSL 语句写法GET http://localhost:7700/indexes# curl命令如下:$ curl http://localhost:7700/indexes
同样,我们可以 利用 meilisearch 自带的看板进行搜索查询;
(3)修正索引操作
# DSL 措辞PUT http://192.144.228.170:7700/indexes{ "uid" : "product", "primaryKey": "id"}# 注:uid是必需的字段
(4)删除索引
DELETE http://192.144.228.170:7700/indexes/product
四、文档 - 增编削查(1)添加或更换文档
# 解释:如果文档id存在,则更换文档,如果指定的索引不存在,则自动创建索引POST http://192.144.228.170:7700/indexes/product/documents[ { "id": "1", "name": "GoLang", "desc": "互联网时期的C措辞", "father": "Ken Thompson", "company": "Google" }, { "id": "2", "name": "Python", "desc": "人生苦短,我用Python", "father": "Guido van Rossum" }, { "id": "3", "productName": "手机", "品牌": "xiaomi", "价格": "4299", "desc": "让天下没用难用的手机" }]
把稳:Meilisearch 0.27 仅支持 JSON、ND JSON、以及 CSV 格式的数据。
(2)添加或更新文档# 解释:如果id存在,则更新文档PUT http://192.144.228.170:7700/indexes/product/documents[ { "id": "4", "name": "Rust", "desc": "就很难" }, { "id": "5", "name": "Java", "desc": "仅次于PHP的存在", "father": "James Gosling" }, { "id": "6", "productName": "二锅头", "品牌": "红星", "价格": "9.5", "desc": "让天下没用难喝的酒" }]
(3)查询索引下的所有文档
# 可选参数offset、limit、attributesToRetrieve=GET http://192.144.228.170:7700/indexes/product/documents
(4)查询单个指定文档
# 路径参数1为文档的primaryKeyGET http://192.144.228.170:7700/indexes/product/documents/1
(5)删除索引下的所有文档
DELETE http://192.144.228.170:7700/indexes/product/documents
(6)删除单个指定文档
DELETE http://192.144.228.170:7700/indexes/product/documents/6
(7)批量删除文档
POST http://jvm123.com:7700/indexes/product/documents/delete-batch["1", "2", "3"]
(8)http 办法搜索
GET和POST都可进行搜索,建议利用POST(官方建议)POST http://192.144.228.170:7700/indexes/product/search{ "q": "go", "limit": 5, "offset": 0}结果如下:{ "hits": [ { "id": "1", "name": "GoLang", "desc": "互联网时期的C措辞", "father": "Ken Thompson", "company": "Google" }, { "id": "5", "name": "Jave", "desc": "没有对手的东西", "father": "James Gosling" }, { "id": "4", "name": "Rust", "desc": "就很难", "father": "Ken Thompson", "company": "Google" } ], "offset": 0, "limit": 5, "nbHits": 3, "exhaustiveNbHits": false, "processingTimeMs": 0, "query": "go"}
(9)http 办法查看异步更新状态
所有create/update/delete要求,都会将其操作放入一个行列步队中,并返回一个updateId,通过updateId,可以查询本次操作的结果状态信息
① 查看所有异步更新状态的信息GET http://192.144.228.170:7700/indexes/product/updates[ { "status": "processed", "updateId": 0, "type": { "name": "DocumentsAddition", "number": 3 }, "duration": 0.355614339, "enqueuedAt": "2021-05-11T07:53:05.042469777Z", "processedAt": "2021-05-11T07:53:05.406005185Z" }, { "status": "processed", "updateId": 1, "type": { "name": "DocumentsAddition", "number": 3 }, "duration": 0.004087888, "enqueuedAt": "2021-05-11T07:56:10.200752903Z", "processedAt": "2021-05-11T07:56:10.210661520Z" }, { "status": "processed", "updateId": 2, "type": { "name": "DocumentsPartial", "number": 3 }, "duration": 0.006438527, "enqueuedAt": "2021-05-11T07:59:10.648921904Z", "processedAt": "2021-05-11T07:59:10.661462108Z" }]
② 查看指定 updateId 的异步更新状态信息
GET http://192.144.228.170:7700/indexes/product/updates/1{ "status": "processed", "updateId": 1, "type": { "name": "DocumentsAddition", "number": 3 }, "duration": 0.004087888, "enqueuedAt": "2021-05-11T07:56:10.200752903Z", "processedAt": "2021-05-11T07:56:10.210661520Z"}
(10)查看其他信息
# 查看索引的setting配置信息GET http://192.144.228.170:7700/indexes/product/settings# 查看索引的指标信息GET http://192.144.228.170:7700/indexes/product/stats# 查看 meilisearch 的keysGET http://192.144.228.170:7700/keys# 查看 meilisearch 的指标信息GET http://192.144.228.170:7700/stats# 查看 meilisearch 的康健状况GET http://192.144.228.170:7700/health# 查看 meilisearch 的版本信息GET http://192.144.228.170:7700/version# dump 备份POST http://192.144.228.170:7700/dumps结果如下:{ "uid": "20210511-085916182", "status": "in_progress"}#解释:.dump备份文件 在MEILI_DUMPS_DIR所指定的位置,uid为本次备份的唯一标识,可以通过UID,查看完成状态# 查看dump备份完成状态GET http://192.144.228.170:7700/dumps/20210511-085916182/status{ "uid": "20210511-085916182", "status": "done"}#解释:done表示已完成
这一点不仅表示在安装和启动大略方面,而且还表示在引入到新项目中前后端(front-end-integration)对接开拓的整合上,官网直接给出前端样例整合样例(JavaScript的样例、Vue.js 的样例、React的调用样例);
见官网:Quick start | Meilisearch Documentation v0.27【https://docs.meilisearch.com/learn/getting_started/quick_start.html#front-end-integration】
① JavaScript 原生整合 Meilisearcha. 修正meilisearch的做事器地址,将下面代码复制到文本文件中保存,并修正后缀为 .html;
b. 用浏览器打开此文件,或者直接将此文件拖动到浏览器中,即可;
c. 在浏览器的输入框中输入你想查找的关键字接口发送要求;
<!DOCTYPE html><html lang="en"> <head> <meta charset="utf-8" /> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@meilisearch/instant-meilisearch/templates/basic_search.css" /> </head> <body> <div class="wrapper"> <div id="searchbox" focus></div> <div id="hits"></div> </div> </body> <script src="https://cdn.jsdelivr.net/npm/@meilisearch/instant-meilisearch@0.3.2/dist/instant-meilisearch.umd.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/instantsearch.js@4"></script> <script> const search = instantsearch({ indexName: "movies", searchClient: instantMeiliSearch( // 把稳:修恰好做事器地址 "http://localhost:7700" ) }); search.addWidgets([ instantsearch.widgets.searchBox({ container: "#searchbox" }), instantsearch.widgets.configure({ hitsPerPage: 8 }), instantsearch.widgets.hits({ container: "#hits", templates: { item: ` <div> <div class="hit-name"> {{#helpers.highlight}}{ "attribute": "title" }{{/helpers.highlight}} </div> </div> ` } }) ]); search.start(); </script></html>
(2)为 Meilisearch 添加防护
默认情形下,Meilisearch API是不受保护的,因此所有路由都是公开可访问的。你可以设置一个主密钥来保护你的实例不被未经授权的利用:
在启动的时候设置主密钥 master-key:
# 通过 CLI 的办法在启动的时候指定master-key作为主密钥:## 当然,主密钥的值你可以任意设置,但推举适用 UUID 比较繁芜随机的密钥天生器来天生安全的密码用于生产环境$ ./meilisearch --master-key="drew@345" # "drew@345":MASTER_KEY主密钥# 把稳:以上便是添加meilisearch的防护,但是:## 1. meilisearch 康健状态api接口放开,不会受保护,其他的API接口收到了防护;## 2. meilisearch 会自动天生两个默认的 api 密钥,用于 search 操作;## 3. 如果meilisearch 已是启动状态,则须要先停滞再启动meilisearch时指定master-key;### 3.1 停滞meilisearch 的思路:① 先过滤出meilisearch的进程(ps -aux | grep meilisearch);② 终止进程(kill -9 [PID]);# 获取 meilisearch的康健状态GET http://localhost:7700/health## 返回结果:{"status":"avaliable"} 代表正常
六、Java 整合 Meilisearch(1)Maven 依赖
<dependency> <groupId>com.meilisearch.sdk</groupId> <artifactId>meilisearch-java</artifactId> <version>0.7.2</version> <type>pom</type></dependency>
(2)Java 示例代码① 添加文档
package com.meilisearch.sdk;import org.json.JSONArray;import org.json.JSONObject;import java.util.ArrayList;class TestMeilisearch { public static void main(String[] args) throws Exception { JSONArray array = new JSONArray(); ArrayList items = new ArrayList() {{ add(new JSONObject().put("id", "1").put("title", "Carol").put("genres",new JSONArray("[\"Romance\",\"Drama\"]"))); add(new JSONObject().put("id", "2").put("title", "Wonder Woman").put("genres",new JSONArray("[\"Action\",\"Adventure\"]"))); add(new JSONObject().put("id", "3").put("title", "Life of Pi").put("genres",new JSONArray("[\"Adventure\",\"Drama\"]"))); add(new JSONObject().put("id", "4").put("title", "Mad Max: Fury Road").put("genres",new JSONArray("[\"Adventure\",\"Science Fiction\"]"))); add(new JSONObject().put("id", "5").put("title", "Moana").put("genres",new JSONArray("[\"Fantasy\",\"Action\"]"))); add(new JSONObject().put("id", "6").put("title", "Philadelphia").put("genres",new JSONArray("[\"Drama\"]"))); }}; array.put(items); String documents = array.getJSONArray(0).toString(); Client client = new Client(new Config("http://localhost:7700", "masterKey")); // An index is where the documents are stored. Index index = client.index("movies"); // If the index 'movies' does not exist, Meilisearch creates it when you first add the documents. index.addDocuments(documents); // => { "uid": 0 } }}
② 大略搜索
// ================ 大略搜索import com.meilisearch.sdk.model.SearchResult;// Meilisearch is typo-tolerant:SearchResult results = index.search("carlo");System.out.println(results);// 输出SearchResult( hits=[{id=1.0, title=Carol, genres:[Romance, Drama]}], offset=0, limit=20, nbHits=1, exhaustiveNbHits=false, facetsDistribution=null, exhaustiveFacetsCount=false, processingTimeMs=3, query=carlo)
附录(1)干系链接Java 整合 meiliserch:GitHub - meilisearch/meilisearch-java: Java client for Meilisearch参考文章1:「链接」
① 查看进程
ps 显示瞬间进程状态,并不动态连续;(如果想对实时监控进程适用 top)基本参数:-A: 所有的进程均显示出来,与 -e 具有同样的效果; -a: 显示现行终端机下的所有进程,包括其他用户的进程; -u: 以用户为主的进程状态; -x: 常日与a 这个参数一起适用,可列出完全信息。输出格式:-l: 较长、较详细的将改 PID 的信息列出; -j: 事情的格式(jobs format) -f: 做一个更为完全的输出;# 示例# 1. 查看指定用户下的进程ps -u drew # 查看 drew 用户下的进程# 2. 根据CPU 利用率来升序排序ps -aux --sort -pcpu | less# 3. 根据内存利用率来升序排序ps -aux --sort -pmem | less# 4. 根据CPU和内存利用率来显示前十个ps -aux --sort -pcpu,+pmem | head -n 10# 5. 根据进程名排序ps -C meilisearch# 6. 按照树形tree构造显示进程ps -axjf # 或者 pstree
如果对你有所帮助,请不要吝啬三连哦 精彩内容后续持续更新中……