Elasticsearch(ES)的高级搜索(DSL搜索)(下篇)

目录

1. 概述

2. 场景说明

3. 高级搜索(DSL搜索)(下篇)

4. 综述


1. 概述

之前聊了Elasticsearch(ES)的高级搜索(DSL搜索)的一部分内容,今天把剩下的部分聊完。

2. 场景说明

2.1 创建索引同时创建映射

PUT  http://192.168.1.11:9200/index_user

参数:

{
    "settings":{
        "index":{
            "number_of_shards":5,
            "number_of_replicas":0
        }
    },
    "mappings" : {
        "properties":{
            "user_id":{
                "type":"long"
            },
            "name":{
                "type":"text",
                "analyzer":"ik_max_word"
            },
            "login_name":{
                "type":"keyword"
            },
            "age":{
                "type":"integer"
            },
            "birthday":{
                "type":"date"
            },
            "desc":{
                "type":"text",
                "analyzer":"ik_max_word"
            },
            "head_url":{
                "type":"text",
                "index":false
            }
        }
    }
}

2.2 创建文档

此处只举几个例子

POST  http://192.168.1.11:9200/index_user/_doc/1

参数:

{
    "user_id":"1",
    "name":"僵尸猎手",
    "login_name":"jsls",
    "age":25,
    "birthday":"1990-03-01",
    "desc":"我是一名房产经纪人,现在转行了,目前是一名运输工人",
    "head_url":"https://www.zhuifengren.cn/img/jsls.jpg"
}

POST  http://192.168.1.11:9200/index_user/_doc/2

参数:

{
    "user_id":"2",
    "name":"夏维尔",
    "login_name":"xwe",
    "age":28,
    "birthday":"1992-06-06",
    "desc":"我是一名高级开发经理,每天坐地铁上班,在北京住,从不堵车",
    "head_url":"https://www.zhuifengren.cn/img/xwe.jpg"
}

POST  http://192.168.1.11:9200/index_user/_doc/3

参数:

{
    "user_id":"3",
    "name":"迪士尼在逃仙柔",
    "login_name":"dsnzxr",
    "age":10,
    "birthday":"2011-06-22",
    "desc":"我是一名五年级的小学生,每天专车接专车送,中午在学校入伙,食堂菜可好了,上学期期末考试我拿了三好学生奖",
    "head_url":"https://www.zhuifengren.cn/img/dsnzxr.jpg"
}


……………………

3. 高级搜索(DSL搜索)(下篇)

3.1 布尔查询

参数中可以包含多种条件的组合。

其中 must 块下的条件,文档必须都符合才会被查出来。

must_not 块下的条件,文档必须都不符合才会被查出来。

should 块下的条件,文档只要符合一个就能被查出来。

最终结果集是 must、must_not、should 块查询结果的交集。

POST  http://192.168.1.11:9200/index_user/_doc/_search

参数:

{
    "query": {
        "bool": {
            "must": [
                {
                    "match": {
                        "desc": "一名"
                    }
                },
                {
                    "match": {
                        "desc": "小学生"
                    }
                }
            ],
            "must_not": [],
            "should": [
                {
                    "match": {
                        "desc": "一名"
                    }
                },
                {
                    "match": {
                        "desc": "小学生"
                    }
                }
                
            ]
        }
    }
}

3.2 布尔查询,为某个查询加权

 命中加权查询项的文档,分数会提高

POST  http://192.168.1.11:9200/index_user/_doc/_search

参数:

{
    "query": {
        "bool": {
            "should": [
                {
                    "match": {
                        "desc": {
                            "query": "一名",
                            "boost":10
                        }
                        
                    }
                },
                {
                    "match": {
                        "desc": "小学生"
                    }
                }
                
            ]
        }
    }
}

3.3 结果集过滤

从ES查询后,再将结果集过滤一次。

支持范围查询:

  gte:大于等于

  lte:小于等于

  gt:大于

  lt:小于

也支持 term、match 操作。

POST  http://192.168.1.11:9200/index_user/_doc/_search

参数:

{
    "query":{
        "match":{
            "desc":"一名"
        }
    },
    "post_filter": {
        "range" : {
            "age": {
                "gt":10,
                "lt":26
            }
        }
    }
}

3.4 自定义排序

文本类型的字段,只能对keyword类型的文本字段排序,text类型的不能用于排序。

文本类型字段定义时,可以既是text类型,又是keyword类型,排序时使用 字段.keyword 进行排序。

POST  http://192.168.1.11:9200/index_user/_doc/_search

参数:

{
    "query":{
        "match":{
            "desc":"一名"
        }
    },
    "sort":[
        {
            "age":"desc"
        },
        {
            "user_id":"asc"
        },
        {
            "login_name":"asc"
        }
    ]
}

3.5 高亮

高亮效果就是在匹配的关键字上增加标签,便于前端去高亮显示。

POST  http://192.168.1.11:9200/index_user/_doc/_search

参数:

{
    "query":{
        "match":{
            "desc":"一名小学生"
        }
    },
    "highlight":{
        "pre_tags":"<span>",
        "post_tags":"</span>",
        "fields":{
            "desc":{}
        }
    }
}

3.6 子属性查询

属性中包含对象属性或集合属性,对对象或集合的子属性进行查询,使用 主属性.子属性的方式查询

例如:

{

        "term":{

                "list.id":""        

        }

}

3.7 分页、显示总条数例子

"from": 0,

"size": 10,

"track_total_hits": true   // 精确显示总条数

4. 综述

今天简单聊了一下 Elasticsearch(ES)的高级搜索(DSL搜索)剩下的部分,希望可以对大家的工作有所帮助。

欢迎帮忙点赞、评论、加关注 :)

关注追风人聊Java,每天更新Java干货。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

追风人聊Java

您的鼓励将是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值