elasticsearch使用指南之Elasticsearch Search API 概述与URI Search

简介: 本节主要对elasticsearch search api做一个简单的介绍,重点介绍了QUERY_THEN_FETCH、QUERY_AND_FETCH、DFS_QUERY_THEN_FETCH三种搜索类型的工作方式。

本节开始,将详细介绍Search API。
1、Search API概述

详细API如下:

  • public final SearchResponse search(SearchRequest searchRequest, RequestOptions options) throws IOException
  • public final void searchAsync(SearchRequest searchRequest, RequestOptions options, ActionListener < SearchResponse> listener)

首先关注一下SearchRequest

SearchRequest类图如下:
clipboard

其关键属性说明如下:

  • private SearchType searchType = SearchType.DEFAULT:搜索类型。
  1. QUERY_THEN_FETCH
    首先根据路由算法向相关分片(多个)发送请求,此时只返回documentId与一些必要信息(例如用于排序等),然后对各个分片的结果进行汇聚,排序,然后选取客户端指定需要获取的数据条数(top n),然后根documentId再向各个分片请求具体的文档信息。首先根据路由算法向相关分片(多个)发送请求,此时只返回documentId与一些必要信息(例如用于排序等),然后对各个分片的结果进行汇聚,排序,然后选取客户端指定需要获取的数据条数(top n),然后根据documentId再向各个分片请求具体的文档信息。
  2. QUERY_AND_FETCH
    在5.4.x版本开始废弃,是直接向各个分片节点请求数据,每个分片返回客户端请求数量的文档信息,然后汇聚全部返回给客户端,返回的数据为客户端请求数量size (路由后的分片数量)。在5.4.x版本开始废弃,是直接向各个分片节点请求数据,每个分片返回客户端请求数量的文档信息,然后汇聚全部返回给客户端,返回的数据为客户端请求数量size (路由后的分片数量)。
  3. DFS_QUERY_THEN_FETCH
    在开始向各个节点发送请求之前,会进行一次词频、相关性的计算,后续流程与QUERY_THEN_FETCH相同,可以看出,该查询类型的文档相关性会更高,但性能比QUERY_THEN_FETCH要差。
  • private String[] indices:待查询的索引库。
  • private String routing:路由字段值。
  • private String preference:复制组内倾向性。
  • private SearchSourceBuilder source:查询主体(rerquest body),后续会重点讲解。
  • private Boolean requestCache:是否开启查询缓存。
  • private Boolean allowPartialSearchResults:是否允许部分成功。
  • private Scroll scroll:滚动API(用于分页)
  • private int batchedReduceSize = DEFAULT_BATCHED_REDUCE_SIZE:批量归并size:默认为512
  • private int maxConcurrentShardRequests = 0:建议最大值别超过256,其核心含义待研究。
  • private int preFilterShardSize = 128,其核心作用待研究。
  • private String[] types:待查询的类型。

接下来再来重点关注一下查询API几个通用的参数:

  • timeout
    查询的超时时间。
  • from
    查询开始的偏移量,用于分页查询,类似于关系数据库的分页的start。默认值为0。
  • size
    批量获取条数,用于分页查询。
  • search_type
    查询类型,6.4.0只支持QUERY_THEN_FETCH与DFS_QUERY_THEN_FETCH。
  • request_cache
    查询缓存,如果设置为false,取决于index级别的设置,将在索引管理API时详细讲解。
  • allow_partial_search_results
    是否允许部分成功,例如一个查询请求,需要向3个分片发出请求,如果只有两个分片成功返回结果,另外一个出现故障,如果设置false,则会返回整体失败,如果设置为true,则会成功部分结果,默认为true。
  • terminate after
    一个查询为每个分片最多收集的文档数,当达到该数量是,查询会提前结束。
  • batched_reduce_size
    在协调节点上应该立即减少一次请求需要访问的分片数量,如果一次请请求需要汇聚太多节点上的数据,容易造成内存消耗,该值可作为一个保护机制,控制一个请求同一时间并发访问的最大分片数量,默认为512。

注意:search_type, request_cache 和allow_partial_search_results 这三个参数,必须查询url级别的参数(query-string parameters),如果使用Rest low Level API时需要特别留意。

2、URI Search
Elasticsearch支持使用URI请求模式来使用Search API,尽管有些参数无法使用,该模式主要还是用于测试,诸如使用CURL查询命令。URI Search示例如下:

GET twitter/_search?q=user:kimchy

URI Search支持如下参数:

  • q
    定义查询字符串,其语法映射为DSL查询语法之query_string。
  • df
    查询字符串未使用字段前缀时定义的默认字段。
  • analyzer
    针对查询字符串使用的分词器。
  • analyze_wildcard
    是否分析通配符合前缀查询,默认值为false。
  • batched_reduce_size
    控制协调节点批量发送分片的最大个数,主要是控制协调节点内存的消耗而提供的一种保护机制。
  • default_oprator
    默认操作类型,可选值为and、or,默认值为or。
  • lenient
    是否支持类型转换异常,默认为fasle,表示如果将一个字符类型传递给一个数字类型,默认为抛出异常,如果设置true,则忽略该异常。
  • explain
    类似于执行计划,表示对于每一个命中,包含如果得分是如何算出来的,默认为false。
  • _source
    用于对_source字段进行过滤,可以设置false来禁止返回_souce字段,也可以支持通配符,例如obj.*,用于字段过滤。
  • stored_fields
    用于字段过滤,已在字段过滤部分详细介绍过。
  • sort
    排序,可以类似于关系型数据库的排序语法:fieldName:asc | desc,也可以使用特殊字段_score(表示按分数,默认值)。
  • track_scores
    当使用排序时,跟踪返回结果中分数计算过程。
  • track_total_hits
    默认值为true,表示在返回结果中返回满足该查询条件的所有记录数。
  • timeout
    查询超时时间,默认永不超时。
  • terminate_after
    是否开启提前结束查询,主要是控制一次查询,从一个分片中返回的最大文档数量,如果开启,返回结果中会包含一个响应参数terminated_early,指示是否提前结束。
  • from
    用于分页,起始记录数。
  • size
    用于分页,控制一次查询,从每个分片查询的记录条数。
  • search_type
    查询类型,对应SearchType searchType,已在文章开头处介绍。
  • allow_partial_search_results
    是否允许部分分片执行失败,默认为true,也可以集群配置参数:search.default_allow_partial_results来设置默认值。

本节主要是对Elasticsearch Search API有一个概要的认识与如何使用URI进行查询,从下一节开始将深入到Search API各个细节中去,以便大家对Search API的运用得心应手。

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。 &nbsp;
目录
相关文章
|
3月前
|
缓存 监控 前端开发
顺企网 API 开发实战:搜索 / 详情接口从 0 到 1 落地(附 Elasticsearch 优化 + 错误速查)
企业API开发常陷参数、缓存、错误处理三大坑?本指南拆解顺企网双接口全流程,涵盖搜索优化、签名验证、限流应对,附可复用代码与错误速查表,助你2小时高效搞定开发,提升响应速度与稳定性。
|
10月前
|
XML 网络协议 API
从cURL到GraphQL:不同API类型概述
本文概述了不同API类型及其应用,帮助开发人员选择合适的工具。cURL是强大的命令行工具,适用于调试和自动化;RESTful API基于HTTP方法,适合Web服务和微服务架构;SOAP用于企业级应用,提供高安全性;GraphQL通过精确查询减少数据传输;WebSocket支持实时通信,适用于低延迟场景。了解这些API的特点和优势,有助于构建高效、可扩展的应用程序。
|
11月前
|
JSON 供应链 API
1688寻源通API接口概述
1688寻源通API接口是1688开放平台为采购商提供的商品/供应商搜索与匹配服务接口
|
11月前
|
存储 搜索推荐 API
淘宝拍立淘按图搜索API接口系列概述
淘宝拍立淘按图搜索API接口允许用户通过上传图片或拍摄实物来搜索相似或相同的商品。这一功能主要依赖于图像识别技术,系统会对上传的图片进行分析和处理,提取出商品的特征信息,并在淘宝的商品数据库中进行匹配搜索,最终返回与上传图片相似或相同的商品列表。
|
10月前
|
存储 JSON API
淘宝商品详情API接口概述与JSON数据示例
淘宝商品详情API是淘宝开放平台提供的核心接口之一,为开发者提供了获取商品深度信息的能力。以下是技术细节和示例:
|
JSON 安全 API
淘宝商品详情API接口(item get pro接口概述)
淘宝商品详情API接口旨在帮助开发者获取淘宝商品的详细信息,包括商品标题、描述、价格、库存、销量、评价等。这些信息对于电商企业而言具有极高的价值,可用于商品信息展示、市场分析、价格比较等多种应用场景。
|
存储 人工智能 API
(Elasticsearch)使用阿里云 infererence API 及 semantic text 进行向量搜索
本文展示了如何使用阿里云 infererence API 及 semantic text 进行向量搜索。
543 8
|
数据采集 监控 数据挖掘
常用电商商品数据API接口(item get)概述,数据分析以及上货
电商商品数据API接口(item get)是电商平台上用于提供商品详细信息的接口。这些接口允许开发者或系统以编程方式获取商品的详细信息,包括但不限于商品的标题、价格、库存、图片、销量、规格参数、用户评价等。这些信息对于电商业务来说至关重要,是商品数据分析、价格监控、上货策略制定等工作的基础。
|
监控 API 索引
Elasticsearch集群使用 _cluster/health API
Elasticsearch集群使用 _cluster/health API
538 2
|
Unix API 索引
Elasticsearch集群使用 _cat/health API
Elasticsearch集群使用 _cat/health API
274 1