前言
如果大家大致了解过Elasticsearch的查询语句与方法我们就不难知道,Elasticsearch的学习成本是相对较高的。因此,我们就常常希望Elasticsearch能像我们经常使用SQL语句这种我们并不陌生的方式,来实现SQL的查询。
- 但是,我们发现去查询资料,结果发现对方乱七八糟说了一大堆,自己懂不懂不知道,甚至都怀疑对方懂不懂。
- 下定决心决定去学习elascticsearch的查询接口编写方式的,方正那一天记不记得住,如果只要有两三天一不接触,之前学的那些东西,忘了个底掉。
因此,我就在这里分享一下刚刚发现一些东西吧。
配置
基础配置 :Elascicsearch 7.1.1
注意:elasctisearch 是一个版本差异性特别大的东西,所以下面的这些方法应该只支持当前以及以上的版本。如果低于这个版本的,就不一定保证能正常的使用了。
使用SQL语句查询( POST _sql )
POST _sql?format=json
{
"query":"SELECT * FROM book LIMIT 10"
}
是的,我们完全可以使用这样的方式,直接获取我们想要的结果,但是唯一需要注意的便是放回结果的结构稍微有一些问题
{
"columns":
[{"name":"createTime","type":"long"},
{"name":"href","type":"text"},
{"name":"id","type":"long"},
{"name":"img","type":"text"},
{"name":"introduction","type":"text"},
{"name":"modifyTime","type":"long"},
{"name":"title","type":"text"}],
"rows":[
[
1596594927206,
"https://globe.bestb2b.com/jsp/company/product.jsp?id=29060",
1596594927206588,
"https://img03.sogoucdn.com/v2/thumb/crop/xy/ai/x/0/y/0/w/120/h/80/iw/90/ih/60/t/0/ir/3t=2&appid=200997&url=https%3A%2F%2Fglobe.bestb2b.com%2Fjsp%2Fcompany%2F1%2Fcpzs.jpg&referer=https%3A%2F%2Fglobe.bestb2b.com%2Fjsp%2Fcompany%2Fproduct.jsp%3Fid%3D29060&sign=40e249039c29256a70550da7a12437c5",
"[图文] xuqiang 显示 1 - 5 条信息 共0条首页 上一页下一页末页 显示 1 - 5 条信息 共0条首页 上一页下一页末页",1596594927206,"产品展示 - xuqiang - 中国免费商务网"
]]}
如果大家看仔细点就不难看出 , 他讲字段的标题与内容完全分开 并且内容内部的结构体为数组, 并不知道大家使用的工具程序是否会帮助我们进行绑定,只是我们需要注意一下。
如何用 SQL 转化成 Elasticsearch 查询参数( POST _sql/translate)
我们学习的过程之中,最大的问题便是我们不知道我们所需要的的查询方式,应该如何包装我们想要的结构。我们可以使用另一个接口来完成我们想要的操作
POST _sql/translate
{
"query":"SELECT * FROM entry WHERE ( title LIKE '%中%国%' OR introduction LIKE '%中%国%' ) AND id > 1 ORDER BY createTime LIMIT 20 "
}
返回结构:
{
"size" : 20,
"query" : {
"bool" : {
"must" : [
{
"bool" : {
"should" : [
{
"wildcard" : {
"title.keyword" : {
"wildcard" : "*中*国*",
"boost" : 1.0
}
}
},
{
"wildcard" : {
"introduction.keyword" : {
"wildcard" : "*中*国*",
"boost" : 1.0
}
}
}
],
"adjust_pure_negative" : true,
"boost" : 1.0
}
},
{
"range" : {
"id" : {
"from" : 1,
"to" : null,
"include_lower" : false,
"include_upper" : false,
"boost" : 1.0
}
}
}
],
"adjust_pure_negative" : true,
"boost" : 1.0
}
},
"_source" : {
"includes" : [
"href",
"img",
"introduction",
"title"
],
"excludes" : [ ]
},
"docvalue_fields" : [
{
"field" : "createTime"
},
{
"field" : "id"
},
{
"field" : "modifyTime"
}
],
"sort" : [
{
"createTime" : {
"order" : "asc",
"missing" : "_last",
"unmapped_type" : "long"
}
}
]
}
接下去,我们就可以不断的举一反三来帮助我们学习elasctisearch 标准的查询接口编写格式
学习链接
下面这个链接是我学习的时候观摩的博客,内容还是挺全的