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":{}
}
}
}

4. 综述

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

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

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

Elasticsearch(ES)的高级搜索(DSL搜索)(下篇)的更多相关文章

  1. Elasticsearch(ES)的高级搜索(DSL搜索)(上篇)

    1. 概述 之前聊了一下 Elasticsearch(ES)的基本使用,今天我们聊聊 Elasticsearch(ES)的高级搜索(DSL搜索),由于DSL搜索内容比较多,因此分为两篇文章完成. 2. ...

  2. 分布式搜索ElasticSearch构建集群与简单搜索实例应用

    分布式搜索ElasticSearch构建集群与简单搜索实例应用 关于ElasticSearch不介绍了,直接说应用. 分布式ElasticSearch集群构建的方法. 1.通过在程序中创建一个嵌入es ...

  3. 在 Laravel 项目中使用 Elasticsearch 做引擎,scout 全文搜索(小白出品, 绝对白话)

    项目中需要搜索, 所以从零开始学习大家都在用的搜索神器 elasiticsearch. 刚开始 google 的时候, 搜到好多经验贴和视频(中文的, 英文的), 但是由于是第一次接触, 一点概念都没 ...

  4. es站内站内搜索笔记(一)

    es站内站内搜索笔记(一) 第一节: 概述 使用elasticsearch进行网站搜索,es是当下最流行的分布式的搜索引擎及大数据分析的中间件,搜房网的主要功能:强大的搜索框,与百度地图相结合,实现地 ...

  5. ElasticSearch(四):基本搜索

    ElasticSearch(四):基本搜索 学习课程链接<Elasticsearch核心技术与实战> URI Search 使用HTTP的GET方法,在URL中使用查询参数进行查询. GE ...

  6. 使用Elasticsearch中的copy_to来提高搜索效率

    在今天的这个教程中,我们来着重讲解一下如何使用Elasticsearch中的copy来提高搜索的效率.比如在我们的搜索中,经常我们会遇到如下的文档: { "user" : &quo ...

  7. 【转载】[Elasticsearch]ES入门

    传送门:http://www.cnblogs.com/xing901022 ES即简单又复杂,你可以快速的实现全文检索,又需要了解复杂的REST API.本篇就通过一些简单的搜索命令,帮助你理解ES的 ...

  8. solr和ElasticSearch(ES)的区别?

    Solr2004年诞生 ElasticSearch 2010年诞生 ES更新 ElasticSearch简介: ElasticSearch是一个实时的分布式的搜索引擎和分析引擎.它可以帮助你用前所未有 ...

  9. Elasticsearch(es)介绍与安装

    ### RabbitMQ从入门到集群架构: https://zhuanlan.zhihu.com/p/375157411 可靠性高 ### Kafka从入门到精通: https://zhuanlan. ...

随机推荐

  1. Shell-02-数据类型

    shell数据类型 shell常用的数据类型有 字符串.整数型.数组 字符串 字符串是shell编程中最常用最有用的数据类型,字符串可以用单引号,也可以用双引号,也可以不用引号 建议使用双引号,因为双 ...

  2. 区块链-NFT 的实现原理

    作者:林冠宏 / 指尖下的幽灵.转载者,请: 务必标明出处. 博客:http://www.cnblogs.com/linguanh/ 掘金:https://juejin.im/user/1785262 ...

  3. 深入理解HTTP请求流程

    以前写过一篇博客,叫做HTTP的报文分析:https://blog.csdn.net/ZripenYe/article/details/119593269但是感觉还是不太深入.不够全面,顶多了解个大概 ...

  4. mysql使用 分区表使用,常用sql

    mysql使用 分区表使用,常用sql 前言 本文的原文连接是: https://blog.csdn.net/freewebsys/article/details/84839478未经博主允许不得转载 ...

  5. Specification使用in

    //是否包含下级授权点 1 包含 2 不包含 List<AuthorizationPoint> authList = null; List<Long> pointIdList ...

  6. 常用正则表达式最强汇总(含Python代码举例讲解+爬虫实战)

    大家好,我是辰哥~ 本文带大家学习正则表达式,并通过python代码举例讲解常用的正则表达式 最后实战爬取小说网页:重点在于爬取的网页通过正则表达式进行解析. 正则表达式语法 Python的re模块( ...

  7. 【权限管理】Spring Security 执行流程

    转自:https://blog.csdn.net/weixin_37689658/article/details/92752890 1.基本配置使用 (1)创建配置类 创建一个配置类SecurityC ...

  8. HttpURLConnection 中Cookie 使用

    方式一: 如果想通过 HttpURLConnection 访问网站,网站返回cookie信息,下次再通过HttpURLConnection访问时,把网站返回 cookie信息再返回给该网站.可以使用下 ...

  9. Json 文件 : 出现 Expected value at 1:0 问题的解决

    只要找一个json在线解析,验证你的json文件格式的正确性,错误可以忽略. 如要消除红叉,关闭Json Validation即可,如下操作:

  10. C# 计算文件的MD5

    MD5的作用详见:https://baike.baidu.com/item/MD5/212708?fr=aladdin public static string GetFileMD5(string f ...