热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ES的查询上下文、评分、元数据

一、元数据1、从索引中查询出的结果可以称之为元数据,如下图  2、可以禁止元数据的展示(一般不使用)使用如下代码查询后,元数据将不再展示1GETproduct_search2{3_

一、元数据

1、从索引中查询出的结果可以称之为元数据,如下图

 

 2、可以禁止元数据的展示(一般不使用)

使用如下代码查询后,元数据将不再展示

1 GET product/_search
2 {
3 "_source": false,
4 "query": {
5 "match_all": {}
6 }
7 }

好处:节省存储开销

坏处:不支持update、update_by_query、reindex API

3、数据源过滤器

第一种:使用下图这种形式设置索引mapping,查询结果中只会包含name和price,不会包含desc和tags

1 PUT product1
2 {
3 "mappings": {
4 "_source": {
5 "includes": [
6 "name",
7 "price"
8 ],
9 "excludes": [
10 "desc",
11 "tags"
12 ]
13 }
14 }
15 }

第二种:在查询时指定include和exclude字段

1 GET product/_search
2 {
3 "_source": {
4 "includes": [
5 "name"
6 ],
7 "excludes": [
8 "age"
9 ]
10 },
11 "query": {
12 "match_all": {}
13 }
14 }

 二、全文检索

1、match:根据字段进行匹配。select * from table where name = '';

2、match_all:无条件匹配。select * from table;

3、multi_match:从指定“字段中匹配。select * from table where name=shouji and age=shouji;

1 GET product/_search
2 {
3 "query": {
4 "multi_match": {
5 "query": "shouji",
6 "fields": ["name","age"]
7 }
8 }
9 }

4、match_phrase:会被分词

  被检索字段必须包含match_phrase中的所有词项并且顺序必须相同

  被检索字段包含的match_phrase中的词项之间不能有其他问题

1 GET product/_search
2 {
3 "query": {
4 "match_phrase": {
5 "name": "my name"
6 }
7 }
8 }

如上代码:查询的name字段必须为my name,不能为my xx name、name my


三、精准查询

term:搜索词不会被分词

1、如下图查询没有结果是因为:搜索词没有被分词,所以my name lyc被当成一个整体。但是索引中my name lyc被分成了my、name、lyc。所有没有匹配记录

 

 

 2、如下图就有结果,因为搜索词没有被分词,而索引中name字段取了keyword,也不会被分词。所以有匹配结果

 

 

 3、terms

1 GET product/_search
2 {
3 "query": {
4 "terms": {
5 "tags": [
6 "lowbee",
7 "gongjiaoka"
8 ]
9 }
10 }
11 }

4、range:范围查询

1 GET product/_search
2 {
3 "query": {
4 "range": {
5 "price": {
6 "gte": 10,
7 "lte": 20
8 }
9 }
10 }
11 }

四、过滤器

作用:筛选数据,不会计算相关度评分,提高效率

   而query则是会计算相关度评分的

若数据量非常大的时候使用filter会降低性能开销


五、组合查询(bool query)

1、must:所有条件都必须符合相当于sql中的and

使用下面代码查询出的结果有相关度评分

1 GET product/_search
2 {
3 "query": {
4 "bool": {
5 "must": [
6 {
7 "match": {
8 "name": "lyc"
9 }
10 }
11 ]
12 }
13 }
14 }

2、filter:将上图中must替换为filter。替换后查出的结果相关度评分为0。

3、must_not:所有条件都不符合的结果

4、should:或者,相当于sql中的or

5、must与filter组合使用

下面代码为must与filter组合使用,若样本很多时,可以先使用filter进行过滤(filter不计算相关度分数,节省了性能消耗),之后再使用match计算相关度评分。

1 GET product/_search
2 {
3 "query": {
4 "bool": {
5 "must": [
6 {
7 "match": {
8 "name": "lyc"
9 }
10 }
11 ],
12 "filter": [
13 {
14 "range": {
15 "age": {
16 "gte": 10
17 }
18 }
19 }
20 ]
21 }
22 }
23 }

6、should与filter或must组合使用时

  minimum_should_match:若没有这个参数,should条件可以被忽略(不匹配)。后面的数字表示需要有几个should满足条件(若组合查询有must或者filter时该参数默认为0;若只有should,该参数默认为1;若需要满足其他场景,该参数需要手动设置)

1 GET product/_search
2 {
3 "query": {
4 "bool": {
5 "filter": [
6 {
7 "range": {
8 "age": {
9 "gte": 10
10 }
11 }
12 }
13 ],
14 "should": [
15 {
16 "match_phrase": {
17 "name": "my name"
18 }
19 }
20 ],
21 "minimum_should_match": 1
22 }
23 }
24 }

 


作者:http://cnblogs.com/lyc-code/



本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权力。



推荐阅读
  • 使用cpphttplib构建HTTP服务器以处理带有查询参数的URL请求 ... [详细]
  • 在Ubuntu系统中,由于预装了MySQL,因此无需额外安装。通过命令行登录MySQL时,可使用 `mysql -u root -p` 命令,并按提示输入密码。常见问题包括:1. 错误 1045 (28000):访问被拒绝,这通常是由于用户名或密码错误导致。为确保顺利连接,建议检查MySQL服务是否已启动,并确认用户名和密码的正确性。此外,还可以通过配置文件调整权限设置,以增强安全性。 ... [详细]
  • 深入解析Gradle中的Project核心组件
    在Gradle构建系统中,`Project` 是一个核心组件,扮演着至关重要的角色。通过使用 `./gradlew projects` 命令,可以清晰地列出当前项目结构中包含的所有子项目,这有助于开发者更好地理解和管理复杂的多模块项目。此外,`Project` 对象还提供了丰富的配置选项和生命周期管理功能,使得构建过程更加灵活高效。 ... [详细]
  • MongoDB Aggregates.group() 方法详解与编程实例 ... [详细]
  • voc生成xml 代码
    目录 lxmlwindows安装 读取示例 可视化 生成示例 上面是代码,下面有调用示例 api调用代码,其实只有几行:这个生成代码也很简 ... [详细]
  • 基于Node.js的高性能实时消息推送系统通过集成Socket.IO和Express框架,实现了高效的高并发消息转发功能。该系统能够支持大量用户同时在线,并确保消息的实时性和可靠性,适用于需要即时通信的应用场景。 ... [详细]
  • 本文探讨了如何在C#中实现USB条形码扫描仪的数据读取,并自动过滤掉键盘输入,即使不知道设备的供应商ID(VID)和产品ID(PID)。通过详细的技术指导和代码示例,展示了如何高效地处理条形码数据,确保系统能够准确识别并忽略来自键盘的干扰信号。该方法适用于多种USB条形码扫描仪,无需额外配置设备信息。 ... [详细]
  • 在《PHP应用性能优化实战指南:从理论到实践的全面解析》一文中,作者分享了一次实际的PHP应用优化经验。文章回顾了先前进行的一次优化项目,指出即使系统运行时间较长后出现的各种问题和性能瓶颈,通过采用一些通用的优化策略仍然能够有效解决。文中不仅详细阐述了优化的具体步骤和方法,还结合实例分析了优化前后的性能对比,为读者提供了宝贵的参考和借鉴。 ... [详细]
  • 结语 | 《探索二进制世界:软件安全与逆向分析》读书笔记:深入理解二进制代码的逆向工程方法
    结语 | 《探索二进制世界:软件安全与逆向分析》读书笔记:深入理解二进制代码的逆向工程方法 ... [详细]
  • MySQL性能优化与调参指南【数据库管理】
    本文详细探讨了MySQL数据库的性能优化与参数调整技巧,旨在帮助数据库管理员和开发人员提升系统的运行效率。内容涵盖索引优化、查询优化、配置参数调整等方面,结合实际案例进行深入分析,提供实用的操作建议。此外,还介绍了常见的性能监控工具和方法,助力读者全面掌握MySQL性能优化的核心技能。 ... [详细]
  • 2019年后蚂蚁集团与拼多多面试经验详述与深度剖析
    2019年后蚂蚁集团与拼多多面试经验详述与深度剖析 ... [详细]
  • 为了优化直播应用底部聊天框的弹出机制,确保在不同设备上的布局稳定性和兼容性,特别是在配备虚拟按键的设备上,我们对用户交互流程进行了调整。首次打开应用时,需先点击首个输入框以准确获取键盘高度,避免直接点击第二个输入框导致的整体布局挤压问题。此优化通过调整 `activity_main.xml` 布局文件实现,确保了更好的用户体验和界面适配。 ... [详细]
  • MySQL:不仅仅是数据库那么简单
    MySQL不仅是一款高效、可靠的数据库管理系统,它还具备丰富的功能和扩展性,支持多种存储引擎,适用于各种应用场景。从简单的网站开发到复杂的企业级应用,MySQL都能提供强大的数据管理和优化能力,满足不同用户的需求。其开源特性也促进了社区的活跃发展,为技术进步提供了持续动力。 ... [详细]
  • MySQL 数据操作:增、删、查、改全面解析
    MySQL 数据操作:增、删、查、改全面解析 ... [详细]
  • 利用ViewComponents在Asp.Net Core中构建高效分页组件
    通过运用 ViewComponents 技术,在 Asp.Net Core 中实现了高效的分页组件开发。本文详细介绍了如何通过创建 `PaginationViewComponent` 类并利用 `HelloWorld.DataContext` 上下文,实现对分页参数的定义与管理,从而提升 Web 应用程序的性能和用户体验。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有