Elasticsearch查询

Elasticsearch日常操作中最常用的就是查询操作了,查询有分简单查询和复杂查询,简单查询不需要编写查询的结构体,但功能有限。复杂查询支持的功能很多,但是需要编写查询语句,查询语句初学时还是十分痛苦的。

简单查询

简单查询是指仅在普通url请求参数下的查询,例如:

GET twitter/tweet/_search?q=user:kimchy

查询语句查询字段user=kimchy的数据。
常用的查询参数有:

  • sort: 排序, 格式为sort=field:asc(desc)
  • timeout: 超时设置,单位秒
  • from:位移数量,返回多少条数据之后的数据,默认0
  • size: 返回的数据量大小,默认10条

复杂查询

常用的查询做法是构造查询语句进行查询,查询语句初学时感觉比较复杂,理解之后就好很多了。
查询语句进行查询示例:

GET /twitter/tweet/_search
{
    "query" : {
        "term" : { "user" : "kimchy" }
    }
}

跟上面简单查询一样的功能,也是返回user字段等于kimchy的数据。

语句里面常用的字段参数:

query

** query **上面语句已经展示过了,"query" : {"term" : { "user" : "kimchy" }},这时比较简单的,一个比较规范的查询语句模板应该这样子的:

"query" : {
        "query": {
                "bool": {
                    "must": [],必须满足的条件,里面的每个条件的关系相当于and
                    "should": [],应该满足的条件(也有可能不满足),里面的每个条件的关系相当于or
                    "must_not": [],不能满足的条件,里面的每个条件的关系为and
                }
            }
    }

平常查询的时候向里面填条件就可以了。

from, size

跟上面一样的

sort

稍微不一样,花样更多了,举个例子:
普通版的排序:

GET /my_index/my_type/_search
{
    "sort" : [
        { "post_date" : {"order" : "asc"}},
        "user",
        { "name" : "desc" },
        { "age" : "desc" },
        "_score"
    ],
    "query" : {
        "term" : { "user" : "kimchy" }
    }
}

可以排序数组里面的值,例如数组的平均值,最大值等等:

GET /my_index/my_type/_search
{
    "sort" : [
        { "post_date" : {"order" : "asc"}},
        { "name" : "desc" },
        { "price" : {"order" : "asc", "mode" : "avg"}}, 平均数来排序,支持max,min,sum,median,avg
		{ "age" : {"order" : "asc", "missing" : "_last"}}, 没有值的一律按最小值,支持_last,_first
    ],
    "query" : {
        "term" : { "user" : "kimchy" }
    }
}

也支持自定义排序字段脚本:

GET /_search
{
    "query" : {
        "term" : { "user" : "kimchy" }
    },
    "sort" : {
        "_script" : {
            "type" : "number",
            "script" : {
                "lang": "painless",
                "source": "doc['field_name'].value * params.factor",
                "params" : {
                    "factor" : 1.1
                }
            },
            "order" : "asc"
        }
    }
}
返回结果中增加自定义字段

在查询时还可以增加自定义字段,例如元数据里面含有数目和单价,我们可以增加一个自定义的字段,例如总金额等等。

GET /_search
{
    "query" : {
        "match_all": {}
    },
    "script_fields" : {
        "total_amount" : {
            "script" : {
                "lang": "painless",
                "source": "doc['price'].value * doc['num'].value"
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值