当前位置:   article > 正文

Elasticsearch(ES)的高级搜索(DSL搜索)(下篇)_es查询结果交集

es查询结果交集

目录

1. 概述

2. 场景说明

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

4. 综述


1. 概述

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

2. 场景说明

2.1 创建索引同时创建映射

PUT  http://192.168.1.11:9200/index_user

参数:

  1. {
  2. "settings":{
  3. "index":{
  4. "number_of_shards":5,
  5. "number_of_replicas":0
  6. }
  7. },
  8. "mappings" : {
  9. "properties":{
  10. "user_id":{
  11. "type":"long"
  12. },
  13. "name":{
  14. "type":"text",
  15. "analyzer":"ik_max_word"
  16. },
  17. "login_name":{
  18. "type":"keyword"
  19. },
  20. "age":{
  21. "type":"integer"
  22. },
  23. "birthday":{
  24. "type":"date"
  25. },
  26. "desc":{
  27. "type":"text",
  28. "analyzer":"ik_max_word"
  29. },
  30. "head_url":{
  31. "type":"text",
  32. "index":false
  33. }
  34. }
  35. }
  36. }

2.2 创建文档

此处只举几个例子

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

参数:

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

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

参数:

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

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

参数:

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


……………………

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

3.1 布尔查询

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

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

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

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

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

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

参数:

  1. {
  2. "query": {
  3. "bool": {
  4. "must": [
  5. {
  6. "match": {
  7. "desc": "一名"
  8. }
  9. },
  10. {
  11. "match": {
  12. "desc": "小学生"
  13. }
  14. }
  15. ],
  16. "must_not": [],
  17. "should": [
  18. {
  19. "match": {
  20. "desc": "一名"
  21. }
  22. },
  23. {
  24. "match": {
  25. "desc": "小学生"
  26. }
  27. }
  28. ]
  29. }
  30. }
  31. }

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

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

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

参数:

  1. {
  2. "query": {
  3. "bool": {
  4. "should": [
  5. {
  6. "match": {
  7. "desc": {
  8. "query": "一名",
  9. "boost":10
  10. }
  11. }
  12. },
  13. {
  14. "match": {
  15. "desc": "小学生"
  16. }
  17. }
  18. ]
  19. }
  20. }
  21. }

3.3 结果集过滤

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

支持范围查询:

  gte:大于等于

  lte:小于等于

  gt:大于

  lt:小于

也支持 term、match 操作。

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

参数:

  1. {
  2. "query":{
  3. "match":{
  4. "desc":"一名"
  5. }
  6. },
  7. "post_filter": {
  8. "range" : {
  9. "age": {
  10. "gt":10,
  11. "lt":26
  12. }
  13. }
  14. }
  15. }

3.4 自定义排序

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

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

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

参数:

  1. {
  2. "query":{
  3. "match":{
  4. "desc":"一名"
  5. }
  6. },
  7. "sort":[
  8. {
  9. "age":"desc"
  10. },
  11. {
  12. "user_id":"asc"
  13. },
  14. {
  15. "login_name":"asc"
  16. }
  17. ]
  18. }

3.5 高亮

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

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

参数:

  1. {
  2. "query":{
  3. "match":{
  4. "desc":"一名小学生"
  5. }
  6. },
  7. "highlight":{
  8. "pre_tags":"<span>",
  9. "post_tags":"</span>",
  10. "fields":{
  11. "desc":{}
  12. }
  13. }
  14. }

3.6 子属性查询

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

例如:

{

        "term":{

                "list.id":""        

        }

}

3.7 分页、显示总条数例子

"from": 0,

"size": 10,

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

4. 综述

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/421669
推荐阅读
相关标签
  

闽ICP备14008679号