美文网首页
09_操控Elasticsearch的工具与DSL语法

09_操控Elasticsearch的工具与DSL语法

作者: 地学小哥 | 来源:发表于2020-03-13 22:40 被阅读0次

内容简介:前面已经介绍过了ElasticSearch这套本文型数据库,要想用它最关键的是要懂得DSL语言,因为只有懂得DSL才能学会怎么从ES里面找数据出来,送数据进去等等,今天我们就一起说说这方面的事情吧!

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中调试

图1 kibana中的ES调试环境

写好一段DSL语句后,直接点蓝色三角,右边就会返回结果,如果有错误会同时提示。

另外,还可以用第三方工具调试,推荐Postman,这也是一个开源软件,专门测试各种http形式的api接口的,允许分析各种返回信息格式,支持post,get,put等命令。

几个必要配置
1、中文分词器
一般英文很好分词,按照空格就行了,但是中文不行,这需要用户自己安装elasticsearch-analysis-ik。安装教程很多,这里不啰嗦了,安装好了,你检索的中文会自动分割,如果不行,那就是没装好(废话)。

2、开启x-pack安全功能
以前x-pack是需要花钱订阅的,现在不需要了。x-pack开启后,访问9200端口就需要用户名密码了。如果不启动,哪大家都可以查询index,甚至添加和删除里面信息,以前用免费的,更多情况下没办法,只能通过ip或者网段限制来提高安全性。

一句话总结:ES的发展很快,不是一篇文章就能说明白的,这里我想大家只要掌握原理,剩下的细节都可以在实践中来,最重要的是要有一颗好奇心,坑趟多了,都可以成为专家!

相关文章

网友评论

      本文标题:09_操控Elasticsearch的工具与DSL语法

      本文链接:https://www.haomeiwen.com/subject/wpsuhhtx.html