内容简介:前面已经介绍过了ElasticSearch这套本文型数据库,要想用它最关键的是要懂得DSL语言,因为只有懂得DSL才能学会怎么从ES里面找数据出来,送数据进去等等,今天我们就一起说说这方面的事情吧!
![](https://img.haomeiwen.com/i21267441/fa57770790e394af.png)
1、ES与ES的客户端
ES安装好后,如果启动正常,默认开启9200端口,打开浏览器如果返回信息,这就算大功告成。接下来第一个要面对的就是选择客户端了。ES支持的客户端很多,C#,Java,Python,php等等,当然如果不用客户端也完全可以通过标准的Get/Post等http协议命令来展开交互。
选择合适的client
在elastic官网上,可以找到各种客户端的最新版本信息和下载地址,因为ES本身是开源的,所以一般客户端也是开源的,在github都能找到相关的项目。
以Python为例,现在命令行下运行pip install elasticsearch就可以完成安装。
然后直接可以在python代码中,操作ES,示例如下:
from elasticsearch import Elasticsearch
# http_auth:表示http的basic认证
es = Elasticsearch(['10.2.14.251'], http_auth=('elastic', 'password'), port=9200)
print(es.cat.health())
print(es.count(index = 'index_name'))
有client的好处是,可以用自己习惯的语法方式与ES进行交互。
6.x后的变化
ES的升级很快,一转眼马上就快要出8.0版本了。主要变化有:
- 一个index只能有一个type,名称是 _doc,7.0版本以后完全抛弃了type。
- 字段类型(datatype)的string取消了,可以用text类型替代。
- mapping parameters中的index只能接收一个bool值,true或者false。
2、认识DSL
要想更好地与ES交互,还需要掌握一套专门的语法规则,类似数据库查询语言SQL,在ES这里叫DSL。大家可能疑惑,都是数据库为啥不用SQL呢?我想这主要是ES和常见的关系型数据库功能定位不一样,常见的SQL语法是针对较确定性的查询,而DSL更灵活,面向的是大数据搜索,什么分词、打分、分片、匹配等概念与SQL那些语法规则没法一一对应,所以才设计这个DSL吧!
下面这个几行代码就是最常见的DSL语句,功能是返回一个index里面的全部数据信息:
GET /index/_search
{
"query": {
"match_all": {}
}
}
_search是一个关键字,一般带下划线的都是
全返回来信息太多了,哪如果需要查询指定字段的结果呢?
GET /index/_search
{
"query": {
"match_all": {}
},
"_source": [
"product_name",
"price"
]
}
再进一步,如果想查一个字段内指定信息的文档呢?你可以这样
GET /index/_search
{
"query": {
"match": {
"product_name": "一本书"
}
},
"sort": [
{
"price": "desc"
}
]
}
注意里面的sort,还可以把返回信息给排个序
上面的"product_name": "一本书",如果变为"product_name": "一本书工具书",这时候查询内容会被拆分,比如:一本书、工具书、一本,工具。对这就是分词!
我们常用搜索时候,回来信息是排序的,在ES中也是这样,索引中只要有任意一个匹配拆分后词就可以出现在结果中,只是匹配度越高的排越前面(当然你也可以设计打分公式)。
3、调试环境
有时候记不住那么多常用关键字和语法,这时候你可以尝试一下在ELK中的Kibana下面来调试DSL语法,一般kibana默认5601端口,登陆后,找到下图位置
kibana中调试
![](https://img.haomeiwen.com/i21267441/65f26c65443d2c91.png)
写好一段DSL语句后,直接点蓝色三角,右边就会返回结果,如果有错误会同时提示。
另外,还可以用第三方工具调试,推荐Postman,这也是一个开源软件,专门测试各种http形式的api接口的,允许分析各种返回信息格式,支持post,get,put等命令。
几个必要配置
1、中文分词器
一般英文很好分词,按照空格就行了,但是中文不行,这需要用户自己安装elasticsearch-analysis-ik。安装教程很多,这里不啰嗦了,安装好了,你检索的中文会自动分割,如果不行,那就是没装好(废话)。
2、开启x-pack安全功能
以前x-pack是需要花钱订阅的,现在不需要了。x-pack开启后,访问9200端口就需要用户名密码了。如果不启动,哪大家都可以查询index,甚至添加和删除里面信息,以前用免费的,更多情况下没办法,只能通过ip或者网段限制来提高安全性。
一句话总结:ES的发展很快,不是一篇文章就能说明白的,这里我想大家只要掌握原理,剩下的细节都可以在实践中来,最重要的是要有一颗好奇心,坑趟多了,都可以成为专家!
网友评论