当前位置: 首页 > article >正文

ES-Search API

一、Search API的分类

  • URI Search
    在url中传入查询参数进行查询,
  • Request Body Search
    使用es提供的,基于json的更加完备的Query Domain Specific Language(DSL)
语法范围
/_search集群上所有的索引
/index1/_search查询索引名为index1的索引
/index1,index2/_search查询索引名为index1和index2的索引中的数据
/index*/_search查询index开头的索引

二、URI Search

  • URI查询参数说明
    GET /movies/_search?q=2012&df=title&sort=year:desc&from=0&size=10&timeout=1s
    {
    “profile”:true
    }

    • q指定查询语句
    • df指定查询的字段,不指定时,会对索引内所有字段进行查询
    • sort排序
    • from+size分页参数
    • profile查看查询如何被执行(注意这个参数放在请求体里)
  • q指定参数查询详细描述

    • 指定字段查询 vs 泛查询
      • q=title:2012 指定了仅对title字段进行查询,效果与q=2012&df=title相同
      • q=2012 对所有字段进行查询
    • 布尔查询
      • AND OR NOT 或者 && || !
        • 必须大写
        • title:(Beautiful OR Mind)
      • 分组
        • +代表must
        • -代表must not
        • title:(+Beautiful -Mind)
    • Term查询 vs Phrase查询
      • q=Beautiful Mind 效果与 q=Beautiful OR Mind 一样
      • q=“Beautiful Mind” 效果与 q=Beautiful AND Mind一样
    • 分组 vs 引号
      • q=title:Beautiful Mind 这个查询与tile:Beautiful OR Mind效果一样,即查询title为Beautiful 或 所有字段中存在Mind;如果想要查询title中存在Beautiful OR Mind,则需要使用括号进行分组,即q=title:(Beautiful Mind)
      • q=title:“Beautiful Mind”
    • 范围查询
      • 区间表示[]表示闭区间 {}表示开区间
      • q=year:[2003 TO 2023]
      • q=year:[* TO 2023]
    • 算数符号
      • q=year:(>=2003 && <=2023)
      • q=year:<=2023
    • 通配符(查询效率低,占用内存大,尤其是放在最前面,不建议使用)
      • q=title:(Beuti???) ?代表1个字符
      • q=title:(Beuti*) *或者0代表多个字符
    • 正则
      *
    • 模糊匹配与近似查询

三、Request Body Search

  • 请求 request
    在这里插入图片描述
  • 响应 response
    在这里插入图片描述
    • 衡量相关度
      • Precision(查准率) - 尽可能的返回较少的无关文档
      • Recall(查全率)-尽量返回较多的相关文档
      • Ranking-是否能够按照相关度进行排序?
        其中查准率和查全率的计算方式我们用图来示例:
        在这里插入图片描述
  • Request Body用法详解
GET /movies/_search
{
	"profile":true, ## 展示查询过程
	"_source":["title","order_date"], ## 要查询的字段,支持通配符比如[*name*]
	"script_fields":{ ## 脚本字段
		"new_field_name":{ ## 新字段名称
			"script":{ ## 指定脚本
				"lang":"painless", ## 指定要执行的脚本
				"source":"doc['order_date'].value+'hello'" ## 脚本内容
			}
		}
	}
	"from":0, ## 分页偏移量,从0开始
	"size":20, ## 每页数量,默认10
	"query":{ ## 查询条件
		"match_all":{},	## 查询全部
		"match":{
			"title":"Beutiful Mind", ## 查询title中存在Beutiful OR Mind的文档
			"title":{ ## 查询title中存在Beutiful AND Mind的文档
				"query":"Beutiful Mind", 
				"operator":"AND"
			}
		},
		"match_phrase":{ ## 模糊匹配
			"title":{ ## 查询title中按顺序存在Beutiful AND Mind 但是中间可以存在一个其他单词的文档
				"query":"Beutiful Mind",
				"slop":1
			}
		},
		"query_string":{ ## 查询字段title中存在Beutiful AND Mind
			"default_field":"title",
			"query":"Beutiful AND Mind"
		},
		"query_string":{
			"fields":["title","name"],
			"query":"(Beutiful AND Mind) OR (JAVA AND ES)"
		},
		"simple_query_string":{ ## 类似于query_string,不支持AND OR NOT会当作字符串处理,Term之间默认是OR,可以指定operator,+代替AND  -代替NOT  |代替OR
			"fields":["title","name"],
			"query":"Beutiful -Mind",
			"default_operator":"AND"
		}
	},
	"sort":[ ## 排序条件,最好在数字型和日期型字段加上排序
		{"order_date":"desc"}
	]
}

http://www.kler.cn/a/300585.html

相关文章:

  • 搜维尔科技:Xsens人形机器人解决方案的优势
  • QT笔记- Qt6.8.1 Android编程 添加AndroidManifest.xml文件以支持修改权限
  • 如何选择合适的服务器?服务器租赁市场趋势分析
  • C++ 强化记忆
  • 彻底理解JVM类加载机制
  • 【postgres】sqlite格式如何导入postgres数据库
  • TCP 拥塞控制:一场网络数据的交通故事
  • Docker 镜像的发布过程
  • 633. 平方数之和-LeetCode(C++)
  • 网络学习-eNSP配置VRRP
  • 【大模型推理】大模型前向推理过程详解
  • PMP–一、二、三模–分类–14.敏捷–技巧–看板面板与燃尽图燃起图
  • VS Code与SVN关联
  • Neo4j图数据库
  • Node.js快速入门
  • 僵尸网络开发了新的攻击技术和基础设施
  • 机器人入门系列:《通过蓝牙模块通讯控制机器人电机转动》
  • Rust在Web开发中的优势是什么?
  • 【lua实战】数组和数组长度
  • Android生成Java AIDL
  • 【网络安全】-文件包含漏洞-pikachu
  • 使用Get包显示Dialog
  • 《HTML 与 CSS—— 响应式设计》
  • C++:priority_queue(优先级队列)的模拟实现
  • 18070 矩阵行交换或列交换
  • 实时音视频之医疗手术示教技术方案探究