ElasticSearch日记之查询表达式入门语法--Bluesky

ElasticSearch日记之查询表达式入门语法--Bluesky

最近项目中因为有些大数据量的查询,在原有的Mysql深感性能不足,于是开始了对ElasticSearch的摸索。我喜欢写原生的查询语句,虽然Github上有工程可以支持直接写sql,不需要会写ES的语句,或者spring data jpa 集成ES的工程,但是鄙人才疏学浅,这种集成的工程报错类型排查困难,相关错误帖子也不多,所以直接采用原生的查询体,这样报错可以在很多帖子上查询到。我将会用sql转变为ES查询体,再转换为代码的思维来解释我所摸索的东西。
关于ES的安装自行百度,ES安装一般是附带kibana的,可以管理ES,也可以当成一个执行ES查询体的网页工具,想写什么语句进行调试学习很方便。

ElasticSearch官方文档链接

链接:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html

条件查询

  1. 单条件查询

     sql:select * from table where id = ?
    

    怎么样,sql看上去简单吧!
    那就翻译成ES查询体,去哪可以直接写ES查询体,kibana这时候就是个好东西了,用kibana写语句的时候是会有自动提示和候选词。
    首先要知道ES的查询体的几个关键词:PUT(增),DELETE(删),POST(改),GET(查),这理解吧
    ES查询体

    GET my_index/_search
     {
         
       "query": {
         
         "term": {
         
           "id": {
         
             "value": "?"
           }
         }
       }
     }
    

    ok,这里就要解释一下了,my_index 代表你要查询的那个索引,不懂这玩意儿的话先去百度下ElasticSearch储存机制,可以通过自己在kibana写一个创建语句执行,玩一玩就知道怎么回事了。/_search restful风格,代表后面跟着的{}大括号里面写的是查询体,当然还有 _mapping(查看数据格式类型) _setting(设置) 等等。
    {}大括号里面其实是个json,查询首先需要query, 那term是什么意思呢?其实是精确查找的意思,因为sql是根据id查询,那就是根据id精确查找,对不对。
    在这里插入图片描述
    注意term跟terms是不一样的,具体后面再说。
    在这里插入图片描述
    看到没有,输入term回车,直接帮你补全,后面怎么写看的懂了吧。FIELD填写要查询的字段,VALUE就代表你要查询的具体值。
    在这里插入图片描述
    Sql翻译成ES查询体了,接下来翻译成java代码。

Java 代码实现

1.pom.xml

 <dependency>
	<groupId>org.elasticsearch</groupId>
	<artifactId>elasticsearch</artifactId>
	<version>6.7.0</version>
</dependency>
<dependency>
	<groupId>org.elasticsearch.client</groupId>
	<artifactId>elasticsearch-rest-high-level-client</artifactId>
	<version>6.7.0</version>
</dependency>

PS:用的是官方推荐的Rest high level client,之前用过JestClient后者在版本方面有优势,ElasticSearch版本切换的不需要更换JestClient,前者Client需要跟着ElasticSearch版本走,但是经过本人压测两种client执行es查询的时候,后者单台服务器只能到200TPS,并且抖动较大,而Rest high level client单台能达到800TPS,数据来自于阿里云压力测试,果断放弃JestClient,如果对性能要求不高的大佬可以使用,本人做电商的,所以需要性能更好的。
2.设置Client参数

import lombok.Getter;
import lombok.Setter;
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.nio.client
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值