Elasticsearch Search API 概述与URI Search

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: Elasticsearch Search API 概述与URI Search

本节开始,将详细介绍Search API的使用。

image.png

详细API如下:


  • public final SearchResponse sear-ch(SearchRequest searchReques-t, RequestOptions options) throws IOException
  • public final void searchAsync(Sear-chRequest searchRequest, Reque-stOptions options, ActionListener li-stener)

    SearchRequest类图:

3aa767e34aebb8bc810e6697d59ba2a6.jpg

其关键属性说明如下:


  • private SearchType searchType = SearchType.DEFAULT:搜索类型


  1. QUERY_THEN_FETCH
    首先根据路由算法向相关分片发送请求,此时只返回documentId与一些必要信息(例如用于排序等),然 后对各个分片的结果进行汇聚、排序。然后选取客户端需要获取的数据条数(top n)。最后根据doc-umentId再向各个分片请求具体的文档信息。

  2. QUERY_AND_FETCH
    在5.4.x版本开始废弃,直接向各个分片节点请求数据,每个分片返回客户端请求数量的文档信息,然后汇聚并全部返回给客户端,返回的数据为客户端请求数量size * (路由后的分片数量)。
  3. DFS_QUERY_THEN_FETCH
    在开始向各个节点发送请求之前会先进行一次词频与相关性的计算,后续处理流程与QUERY_THEN_F-ETCH相同,可以看出该查询类型的文档相关性会更高,但性能比QUE-RY_THEN_FETCH要差。


  • private String[] indices:待查询的索引库。
  • private String routing:路由字段值。
  • private String preference:复制组内倾向性。
  • private SearchSourceBuilder sour-ce:查询主体(rerquest body),后续会重点讲解。
  • private Boolean requestCache:是否开启查询缓存。
  • private Boolean allowPartialSearc-hResults:是否允许部分成功。
  • 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_T-HEN_FETCH与DFS_QUERY_TH-EN_FETCH。
  • request_cache
    查询缓存,如果设置为false,取决于index级别的设置,将在索引管理API时详细讲解。
  • search_results
    是否允许部分成功,例如一个查询请求需要向3个分片发出请求,如果只有两个分片成功返回结果而另外一个出现故障。如果设置为false则会返回整体失败,如果设置为true则会成功部分结果,默认为true。
  • terminate after
    一个查询为每个分片最多收集的文档数,当达到该数量是,查询会提前结束。
  • batched_reduce_size
    在协调节点上应该立即减少一次请求需要访问的分片数量,如果一次请请求需要汇聚太多节点上的数据容易造成内存消耗,该值可作为一个保护机制,控制一个请求同一时间并发访问的最大分片数量,默认为512。


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

image.png

Elasticsearch支持使用URI请求模式来使用Search API,并不支持查询请求体中所有参数,该模式主要用途是用于测试,诸如使用CURL查询命令等。


URI Search示例如下:


1GET 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
    是否支持类型转换异常,默认为fa-sle,如果将一个字符类型传递给一个数字类型会抛出异常。如果设置true则忽略该异常。
  • explain
    类似于执行计划,表示对于每一个命中,包含如果得分是如何算出来的,默认为false。
  • _source
    用于对_source字段进行过滤,可以设置false来禁止返回_souce字段。该参数支持通配符表达式,例如ob-j.*,用于字段过滤。
  • stored_fields
    用于字段过滤,已在字段过滤部分详细介绍过。
  • sort
    排序,可以类似于关系型数据库的排序语法:fieldName:asc | desc,也可以使用特殊字段_score(表示按分数,默认值)。
  • track_scores
    当使用排序时,跟踪返回结果中分数计算过程。
  • track_total_hits
    默认值为true,表示在返回结果中返回满足该查询条件的所有记录数。
  • timeout
    查询超时时间,默认永不超时。
  • terminate_after
    是否开启提前结束查询,主要是控制一次查询,从一个分片中返回的最大文档数量,如果开启,返回结果中会包含一个响应参数terminate-d_early,指示是否提前结束。
  • from
    用于分页,起始记录数。
  • size
    用于分页,控制一次查询,从每个分片查询的记录条数。
  • search_type
    查询类型,已在文章开头处介绍。
  • allow_partial_search_results
    是否允许部分分片执行失败,默认为true,也可以集群配置参数:se-arch.default_allow_partial_results来设置默认值。


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

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
4天前
|
存储 API 索引
Elasticsearch Reroute API 的使用
Elasticsearch Reroute API 的使用
45 1
|
4天前
|
存储 JSON 自然语言处理
Elasticsearch 利用API进行搜索
Elasticsearch 利用API进行搜索
37 0
|
4天前
|
Kubernetes 安全 API
Kubernetes学习-集群搭建篇(三) Node配置完善和API概述
Kubernetes学习-集群搭建篇(三) Node配置完善和API概述
Kubernetes学习-集群搭建篇(三) Node配置完善和API概述
|
4天前
|
存储 自然语言处理 搜索推荐
Elasticsearch 8.10 同义词管理新篇章:引入同义词 API
Elasticsearch 8.10 同义词管理新篇章:引入同义词 API
15 0
|
4天前
|
存储 数据可视化 数据建模
阿里云大佬叮嘱我务必要科普这个 Elasticsearch API
阿里云大佬叮嘱我务必要科普这个 Elasticsearch API
15 0
|
4天前
|
存储 监控 大数据
【Elasticsearch专栏 15】深入探索:Elasticsearch使用API删除旧数据
本文探讨了如何使用Elasticsearch API管理并删除旧数据。Elasticsearch提供RESTful API,支持按条件批量删除。删除策略可基于时间、文档数量或索引。通过`DELETE BY QUERY` API,可以根据时间戳范围删除数据,如删除早于30天的记录。为处理大量数据,建议分批次进行,使用`scroll`和`size`参数控制。监控删除进度可使用任务ID。合理运用这些方法能有效优化存储,适应不同业务需求。
29 0
|
2天前
|
监控 安全 数据挖掘
Email 接口API有哪些?具体分析一下阿里云和AOK的优点
本文介绍了常见的Email接口API,如阿里云邮件推送、AOKSend、SendGrid、Mailgun和Amazon SES。阿里云API以其高稳定性和数据分析功能脱颖而出,支持批量发送和多语言;而AOKSend API以易于集成、高安全性和优秀客户支持为亮点。企业在选择时应考虑自身需求和预算,以优化邮件营销效果。
|
2天前
|
定位技术 API
Angular 调用导入百度地图API接口,2024春招BAT面试真题详解
Angular 调用导入百度地图API接口,2024春招BAT面试真题详解
|
3天前
|
JSON 安全 API
解锁淘宝商品评论API接口:电商数据分析的新视角
淘宝商品评论API接口是淘宝开放平台提供的一组API接口,允许开发者通过编程方式获取淘宝商品评论数据。这些接口可以获取到商品的详细信息、用户评论、评分等数据,为电商数据分析提供了丰富的素材。
|
3天前
|
缓存 负载均衡 安全
探索API接口开发(定制与开发接口)
在当今数字化、互联互通的时代,API(应用程序编程接口)已经成为连接不同软件、服务和应用的关键桥梁。API接口开发,作为软件架构和系统设计的重要组成部分,不仅影响着数据交换的效率,更决定了整个系统的灵活性和可扩展性。本文将深入探讨API接口开发的各个方面,包括其重要性、开发流程、最佳实践以及面临的挑战。

热门文章

最新文章