Elastic 之 elasticsearch 查询操作
创始人
2025-06-01 05:23:01
0

1. 数据准备

POST /liush/_bulk
{"index":{"_id":1}}
{ "title":"小米手机", "images":"http://image.jd.com/12479122.jpg", "price":1999, "stock": 200, "attr": { "category": "手机", "brand": "小米" } }
{"index":{"_id":2}}
{"title":"超米手机", "images":"http://image.jd.com/12479122.jpg", "price":2999, "stock": 300, "attr": { "category": "手机", "brand": "小米" } }
{"index":{"_id":3}}
{ "title":"小米电视", "images":"http://image.jd.com/12479122.jpg", "price":3999, "stock": 400, "attr": { "category": "电视", "brand": "小米" } }
{"index":{"_id":4}}
{ "title":"小米笔记本", "images":"http://image.jd.com/12479122.jpg", "price":4999, "stock": 200, "attr": { "category": "笔记本", "brand": "小米" } }
{"index":{"_id":5}}
{ "title":"华为手机", "images":"http://image.jd.com/12479122.jpg", "price":3999, "stock": 400, "attr": { "category": "手机", "brand": "华为" } }
{"index":{"_id":6}}
{ "title":"华为笔记本", "images":"http://image.jd.com/12479122.jpg", "price":5999, "stock": 200, "attr": { "category": "笔记本", "brand": "华为" } }
{"index":{"_id":7}}
{ "title":"荣耀手机", "images":"http://image.jd.com/12479122.jpg", "price":2999, "stock": 300, "attr": { "category": "手机", "brand": "华为" } }
{"index":{"_id":8}}
{ "title":"oppo手机", "images":"http://image.jd.com/12479122.jpg", "price":2799, "stock": 400, "attr": { "category": "手机", "brand": "oppo" } }
{"index":{"_id":9}}
{ "title":"vivo手机", "images":"http://image.jd.com/12479122.jpg", "price":2699, "stock": 300, "attr": { "category": "手机", "brand": "vivo" } }
{"index":{"_id":10}}
{ "title":"华为nova手机", "images":"http://image.jd.com/12479122.jpg", "price":2999, "stock": 300, "attr": { "category": "手机", "brand": "华为" } }

2. 匹配查询(match)

GET /liush/_search
{"query": {"match": {"title": "小米手机"}}
}

查询出很多数据,不仅包括`小米手机`,而且与`小米`或者`手机`相关的都会查询到,说明多个词之间是`or`的关系。

某些情况下,我们需要更精确查找,我们希望这个关系变成`and`,可以这样做:

GET /liush/_search
{"query": {"match": {"title": {"query": "小米手机","operator": "and"}}}
}

3. 词条查询(term)

`term` 查询被用于精确值 匹配,这些精确值可能是数字、时间、布尔或者那些未分词的字符串。

GET /liush/_search
{"query":{"term":{"price": 4999}}
}

4. 范围查询(range)

`range` 查询找出那些落在指定区间内的数字或者时间

`range` 查询允许以下字符: 

操作符说明
gt大于
gte大于等于
lt小于
lte小于等于
GET /liush/_search
{"query":{"range": {"price": {"gte":  1000,"lt":   3000}}}
}

5. 布尔组合(bool)

布尔查询 又叫 组合查询

`bool`把各种其它查询通过`must`(与)、`must_not`(非)、`should`(或)的方式进行组合

GET /liush/_search
{"query":{"bool":{"must": [{"range": {"price": {"gte": 1000,"lte": 3000}}},{"range": {"price": {"gte": 2000,"lte": 4000}}}]}}
}

注意:一个组合查询里面只能出现一种组合,不能混用 

6. 过滤(filter)

所有的查询都会影响到文档的评分及排名。如果我们需要在查询结果中进行过滤,并且不希望过滤条件影响评分,那么就不要把过滤条件作为查询条件来用。而是使用`filter`方式

GET /liush/_search
{"query": {"bool": {"must": {"match": { "title": "小米手机" }},"filter": {"range": {"price": { "gt": 2000, "lt": 3000 }}}}}
}

 注意:`filter`中还可以再次进行`bool`组合条件过滤。

7. 排序(sort)

`sort` 可以让我们按照不同的字段进行排序,并且通过`order`指定排序的方式

GET /liush/_search
{"query": {"match": {"title": "小米手机"}},"sort": [{"price": { "order": "desc" }},{"_score": { "order": "desc"}}]
}

8. 分页(from/size)

from:从哪一条开始

size:取多少条

GET /liush/_search
{"query": {"match": {"title": "小米手机"}},"from": 2,"size": 2
}

9. 高亮(highlight)

发现:高亮的本质是给关键字添加了标签,在前端再给该标签添加样式即可。

  • fields:高亮字段
  • pre_tags:前置标签
  • post_tags:后置标签
GET /liush/_search
{"query": {"match": {"title": "小米"}},"highlight": {"fields": {"title": {}}, "pre_tags": "","post_tags": ""}
}

10. 结果过滤(_source)

默认情况下,elasticsearch在搜索的结果中,会把文档中保存在`_source`的所有字段都返回。

如果我们只想获取其中的部分字段,可以添加`_source`的过滤

GET /liush/_search
{"_source": ["title","price"],"query": {"term": {"price": 2699}}
}

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
JAVA多线程知识整理 Java多线程基础 线程的创建和启动 继承Thread类来创建并启动 自定义Thread类的子类&#...
【洛谷 P1090】[NOIP... [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G ...
国民技术LPUART介绍 低功耗通用异步接收器(LPUART) 简介 低功耗通用异步收发器...
城乡供水一体化平台-助力乡村振... 城乡供水一体化管理系统建设方案 城乡供水一体化管理系统是运用云计算、大数据等信息化手段࿰...
程序的循环结构和random库...   第三个参数就是步长     引入文件时记得指明字符格式,否则读入不了 ...
中国版ChatGPT在哪些方面... 目录 一、中国巨大的市场需求 二、中国企业加速创新 三、中国的人工智能发展 四、企业愿景的推进 五、...
报名开启 | 共赴一场 Flu... 2023 年 1 月 25 日,Flutter Forward 大会在肯尼亚首都内罗毕...
汇编00-MASM 和 Vis... Qt源码解析 索引 汇编逆向--- MASM 和 Visual Studio入门 前提知识ÿ...
【简陋Web应用3】实现人脸比... 文章目录🍉 前情提要🌷 效果演示🥝 实现过程1. u...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
windows安装JDK步骤 一、 下载JDK安装包 下载地址:https://www.oracle.com/jav...
分治法实现合并排序(归并排序)... 🎊【数据结构与算法】专题正在持续更新中,各种数据结构的创建原理与运用✨...
在linux上安装配置node... 目录前言1,关于nodejs2,配置环境变量3,总结 前言...
Linux学习之端口、网络协议... 端口:设备与外界通讯交流的出口 网络协议:   网络协议是指计算机通信网...
Linux内核进程管理并发同步... 并发同步并发 是指在某一时间段内能够处理多个任务的能力,而 并行 是指同一时间能够处理...
opencv学习-HOG LO... 目录1. HOG(Histogram of Oriented Gradients,方向梯度直方图)1...
EEG微状态的功能意义 导读大脑的瞬时全局功能状态反映在其电场结构上。聚类分析方法一致地提取了四种头表面脑电场结构ÿ...
【Unity 手写PBR】Bu... 写在前面 前期积累: GAMES101作业7提高-实现微表面模型你需要了解的知识 【技...