Windows 本地安装和使用 Elasticsearch
Elasticsearch是一款开源的数据搜索引擎和数据分析引擎,不同于WordPress的搜索,它是noSQL搜索引擎,没有数据库数据表,而是将数据以JSON格式存储在文件里,搜索效率远高于WordPress基于SQL的搜索方式,特别适合大型WooCommerce电商网站,或者做搜索推荐关键词的功能。想了解它,最好的方法是本地安装一个,自己动手试一试。
安装Elasticsearch
下载Elasticsearch,将文件解压并放到磁盘任意位置。它不需要通过注册表安装,直接运行bat文件就可以使用。每次电脑启动时都要运行一次,也可以作为windows服务随电脑启动而运行,我们先使用点击运行的方法。
找到bin/elasticsearch.bat
,双击启动elasticsearch服务。会弹出windows命令行窗口,一堆文字飘过后停住,启动完成。
这时,我们打开浏览器,在地址栏输入
http://localhost:9200/
如果一切正常,你应该能看到elasticsearch的信息。
使用Elasticsearch
Elasticsearch使用REST方式来沟通,所有CRUD操作都要通过发送HTTP请求的方式来完成。也就是说,一个HTTP URL里必须包含一些Elasticsearch引擎需要知道的内容:
- 要请求的服务器地址和端口是多少。
- 要执行什么命令,是create、get、search、update还是delete。
- 命令的具体内容,也就是参数,比如要search什么关键词,update什么数据等等。
既然elasticsearch已经运行起来了,我们就来使用一下。使用上我们有几种选择:
- windows上的cmd命令终端上运行curl命令。
- 安装chrome浏览器插件ElasticSearch Head。
- 安装elasticsearch套件里的图形界面——kibana。
本文选择使用方式1,也是最基本的方式。目前的windows 10自带curl,我们直接开始吧,运行cmd命令打开一个新的windows命令行,开始输入命令。
演示的命令来自Index APIS,你可能发现下面的命令和官方文档的不太一样,文章结尾会解释。
创建索引
创建一个名为’my-index’的索引,运行下面的命令会得到如图所示的结果,告诉我们创建成功了。
curl -X PUT "localhost:9200/my-index-000001?pretty"
向索引中添加数据(documents)
要添加的数据是一个JSON格式的字符串,如图示所,result是created,说明添加成功了。
- _doc : 我们的命令,添加文档。
- 1 : 手动指定了文档的ID,用PUT方法必须手动指定ID,否则会失败。
- -H:指定http请求的header,要发送JSON数据,所以要是指定Content-Type。
curl -X PUT "http://localhost:9200/my-index/_doc/1?pretty" -H "Content-Type: application/json" -d "{ \"name\":\"myname\" }"
也可以让elasticsearch自动创建ID,用POST,如下:
curl -X POST "http://localhost:9200/my-index/_doc/?pretty" -H "Content-Type: application/json" -d "{ \"name\":\"John\" }"
获取索引中的数据
curl -X GET "http://localhost:9200/my-index/_search?pretty" -H "Content-Type: application/json" -d "{ \"query\": { \"match_all\": {} } }"
删除索引
curl -X DELETE "localhost:9200/my-index?pretty"
获取索引信息
curl -X GET "localhost:9200/my-index?pretty"
测试索引是否存在
curl -I "localhost:9200/my-index?pretty"
Windows上使用curl的注意事项
演示的命令和官方给出的不太一样,因为官方命令是在kibana环境下运行的,很多重复的东西,比如服务器地址端口都省略了,我们不能省略。另外,windows上使用curl命令有两个限制:
- 不能随意换行,如果命令换行,行的结尾要使用标记,例如^。
- 不能使用单引号,要使用双引号,因此JSON里的双引号要转义。
基于上述两个原因给出的命令看着不友好,和官方文档结合着看会更好理解。