Elasticsearch SQL的使用案例

前言

如果大家大致了解过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 标准的查询接口编写格式

学习链接

下面这个链接是我学习的时候观摩的博客,内容还是挺全的

https://blog.csdn.net/a867565870/article/details/82785629

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值