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. JavaScript学习02(js快速入门)

    快速入门 基本语法 JavaScript的语法和Java的语法类似,每个语句以;结束,语句块用{...}.但是JavaScrip并不强制要求在每个语句的结尾加;,浏览器中负责执行JavaScript代 ...

  2. 安鸾CTF Writeup PHP代码审计01

    PHP代码审计 01 题目URL:http://www.whalwl.xyz:8017 提示:源代码有泄露 既然提示有源代码泄露,我们就先扫描一遍. 精选CTF专用字典: https://github ...

  3. Nmap 简单功能介绍/TCP Header/常见端口

    Nmap:Network Mapper,网络扫描和嗅探的工具包 基本功能有3个: 1.扫描主机端口,嗅探所提供的网络服务 2.探测一组主机是否在线 3.推断主机所用的操作系统,到达主机经过的路由,系统 ...

  4. innodb是如何存数据的?yyds

    前言 如果你使用过mysql数据库,对它的存储引擎:innodb,一定不会感到陌生. 众所周知,在mysql8以前,默认的存储引擎是:myslam.但mysql8之后,默认的存储引擎已经变成了:inn ...

  5. CMD直接输入Java,Javac,Javap发生乱码解决方式

    首先需要设置jdk的默认编码,在之前一篇博文里有 然后在cmd里直接执行chcp 65001   代表将cmd换成UTF-8的显示页 936是GBK 437为英语

  6. noip36

    开场先看一遍题面,凭着错误的感觉t3叫naive是一个原因,312开局.然后就死的很惨. T1 朴素暴力40pts,细想就有80pts,然而我只写了十分钟左右就爬回T3了,所以... 其实都是借口 正 ...

  7. 【设计模式】装饰者模式(DecoratorMode0

    From: https://liudongdong1.github.io/ 装饰者模式(Decorator Pattern):动态地给一个对象增加一些额外的职责,增加对象功能来说,装饰模式比生成子类实 ...

  8. WPF 知识点总结

    一 · WPF中什么是样式? 首先明白WPF中样式属于资源中重要的一种. 同时样式也是属性值的集合,能被应用到一个合适的元素中,或者说能将一组属性应用到多个元素. WPF中样式可以设置任何依赖属性. ...

  9. qt 中的对象树

    本节内容讲解了什么是对象树以及其所带来的 GUI 编程好处.最后说明了在对象树中析构顺序问题并举了个特殊的例子,来说明平时编程中需要注意的一个点. 什么是对象树? 我们常常听到 QObject 会用对 ...

  10. dpkg:处理 xxx (--configure)时出错解决办法,也可用于卸载软件出错的情况

    dpkg:处理 xxx (--configure)时出错解决办法今早安装nfs时出现问题,找到该文,备份留用.然后在网上找到了这片文章,按步骤走就解决了,中间会提示自动卸载一下,执行那个命令就好了,我 ...