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搜索)(下篇)的更多相关文章
-
Elasticsearch(ES)的高级搜索(DSL搜索)(上篇)
1. 概述 之前聊了一下 Elasticsearch(ES)的基本使用,今天我们聊聊 Elasticsearch(ES)的高级搜索(DSL搜索),由于DSL搜索内容比较多,因此分为两篇文章完成. 2. ...
-
分布式搜索ElasticSearch构建集群与简单搜索实例应用
分布式搜索ElasticSearch构建集群与简单搜索实例应用 关于ElasticSearch不介绍了,直接说应用. 分布式ElasticSearch集群构建的方法. 1.通过在程序中创建一个嵌入es ...
-
在 Laravel 项目中使用 Elasticsearch 做引擎,scout 全文搜索(小白出品, 绝对白话)
项目中需要搜索, 所以从零开始学习大家都在用的搜索神器 elasiticsearch. 刚开始 google 的时候, 搜到好多经验贴和视频(中文的, 英文的), 但是由于是第一次接触, 一点概念都没 ...
-
es站内站内搜索笔记(一)
es站内站内搜索笔记(一) 第一节: 概述 使用elasticsearch进行网站搜索,es是当下最流行的分布式的搜索引擎及大数据分析的中间件,搜房网的主要功能:强大的搜索框,与百度地图相结合,实现地 ...
-
ElasticSearch(四):基本搜索
ElasticSearch(四):基本搜索 学习课程链接<Elasticsearch核心技术与实战> URI Search 使用HTTP的GET方法,在URL中使用查询参数进行查询. GE ...
-
【转载】[Elasticsearch]ES入门
传送门:http://www.cnblogs.com/xing901022 ES即简单又复杂,你可以快速的实现全文检索,又需要了解复杂的REST API.本篇就通过一些简单的搜索命令,帮助你理解ES的 ...
-
solr和ElasticSearch(ES)的区别?
Solr2004年诞生 ElasticSearch 2010年诞生 ES更新 ElasticSearch简介: ElasticSearch是一个实时的分布式的搜索引擎和分析引擎.它可以帮助你用前所未有 ...
-
ELK之 elasticsearch ES集群 head安装
最近项目用到 jenkins ELK 也在一次重新学习了一次 jenkins 不用说了 玩得就是 插件 + base---shell , ELK 这几年最流得log收集平台,当然不止 ...
-
Google 谷歌网页搜索, 学术搜索
Google 谷歌网页搜索, 学术搜索 1. 网页搜索引擎-Google * https://letsgg.tk/ * https://google.kfd.me/ 谷歌搜索镜像: http://d ...
随机推荐
-
Linux Cmd Tool 系列之—script &; scriptreplay
Intro Sometime we want to record cmd and outputs in the interactive shell sessions. However history ...
-
Java并发和多线程(二)Executor框架
Executor框架 1.Task?Thread? 很多人在学习多线程这部分知识的时候,容易搞混两个概念:任务(task)和线程(thread). 并发编程可以使我们的程序可以划分为多个分离的.独立运 ...
-
zabbix agent 类型自带的key
zabbix服务器端通过与zabbix agent通信来获取客户端服务器的数据,agent分为两个版本,在配置主机我们可以看到一个是agent,另一个是agent(active). agent:zab ...
-
apache2将http自动指向https
<VirtualHost *:80> RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_H ...
-
luogu P1053 篝火晚会
传送门 首先如果题目的目标状态不是一个环就不合法 然后先把这个环搞出来,然后每个位置上的数对这个数对应的位置连边,可以发现有若干个环,而只要对这些环执行操作就好了,答案上界显然是\(n\).然后,如果 ...
-
html dom之iframe对象
当从父页面中需要获取使用iframe嵌入的内容时,可以使用图中后面的两个属性 var sonDocument = document.getElementById('iframe_id').conten ...
-
执行shell脚本的四种方式(转)
原文网址:https://www.jb51.net/article/53924.htm 这篇文章主要介绍了Linux中执行shell脚本的4种方法,即总结在Linux中运行shell脚本的4种方法. ...
-
bootstrap组件-导出数据
一.需求:在我们日常工作的时候,对数据的导出有需求.比如导出JSON.XML.SQL等形式.方便我们日常使用. 二.组件:我们可以使用bootstrap的扩展插件Table Export来实现我们的需 ...
-
给class添加id封装
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
-
C语言程序真正的启动函数
为什么要用”真正”这个词?因为我们从学C语言开始,都会先明白这个道理,即C语言有且仅有一个main函数,main函数是C语言的入口点和出口点!(可以参考>http://www.dotcpp.co ...