ElasticSearch查询 第一篇:搜索API

简介:

《ElasticSearch查询》目录导航:

 

不同于SQL语言,对ElasticSearch引擎发送的查询请求,有两种方式:第一种方式是使用RESTful 风格的API请求对数据进行搜索或更新,这意味着,必须使用搜索API向ElasticSearch引擎发起搜索请求;第二种方式是使用Qeury DSL,将查询语言封装成JSON结构,在JSON结构中,封装查询请求的参数,作为请求主体(Request Body),发送给ElasticSearch引擎处理。

DSL是领域专用语言(Domain-Specific Language)的首字母缩写,是一种通用的大数据查询语言,用于实现海量数据的检索分析。

本系列是ElasticSearch的入门文章,用于介绍搜索API的使用方法,只求快速入门,想要深入了解,最好的文档永远是官方手册。

一,约定格式

在《ElasticSearch查询》系列文章中,为了简化描述,突出重点,约定将URL字符串中host:port/index/type 省略,

 curl -XGET 'http://localhost:9200/twitter/tweet/_search?q=user:kimchy'

简写为只包含“HTTP动词+端点+查询参数”的简写格式,如下:

GET /_search?q=user:kimchy

将带有POST请求主体的查询,如下:

curl -XGET 'http://localhost:9200/twitter/tweet/_search' -d '{
    "query" : {
        "term" : { "user" : "kimchy" }
    }
}'

简写为只包含“HTTP动词+端点+请求主体JSON”的格式,如下:

复制代码
GET /_search -d
{
    "query" : {
        "term" : { "user" : "kimchy" }
    }
}
复制代码

二,查询端点(Endpoint)

查询端点允许RESTful API或客户端查询ElasticSearch引擎中存储的数据,通过HTTP动词定义操作,通过URI定位数据资源。

1,用于搜索数据的端点

查询ElasticSearch引擎,主要使用_search 和_query端点,_search端点允许执行搜索查询,返回查询结果。在_search端点上,能够执行RESTful API查询和Qeury DSL查询,例如一下脚本:

复制代码
GET /_search?q=user:kimchy
GET /_search -d
{
    "query" : {
        "term" : { "user" : "kimchy" }
    }
}
复制代码

ElasticSearch的所有查询请求都发送到_search端点,对于_query端点,只用于将查询的结果删除:

DELETE /_query?q=user:kimchy

2,分析端点(_analyze)

分析端点_analyze,用于对查询参数进行分析,并返回分析的结果

POST /_analyze?field=title -d
ElasticSearch Sever

3,计数端点(_count)

在计数端点_count上,执行查询,获取满足查询条件的文档数量

GET /_count?q=user:jim

4,解释端点(_explain)

用于验证指定的文档是否满足查询条件,格式是index/type/_id/_explain,例如

GET index/type/1/_explain?q=message:search

三,根据文档标识ID搜索单个文档

根据文档标识符搜索文档时,使用“index/type/_id” 格式,如下,搜索文档标识为13的文档:

GET /13

四,检查是否有文档满足查询条件

GET /_search/exists?q=user:kimchy

五,URI搜索

请求参数位于_search端点之后,参数之间使用&分割,例如:

GET /_search?pretty&q=title:azure&explain=true&from=1&size=10&sort=title:asc&fields:user,title,content

1,pretty参数

默认情况下,API返回的JSON对象忽略换行符,在请求(Request)中加上pretty参数,强制ElasticSearch引擎在响应(Response)中加上换行符,使返回的结果集JSON可读。

2,查询条件(q)参数

查询条件(q)参数用于指定返回的文档必须匹配的查询条件,例如:q=title:azure,指定搜索title字段中包含azure关键字的文档;

可以设置一个字段包含多个关键字,关键字之间使用空格或逗号分隔,例如:q=title:(azure,aws,cloud),或 q=title:(azure aws cloud),指定搜索title字段中包含azure,aws或cloud的文档;只要title字段包含任意一个关键字,文档就满足查询条件;

q参数可以指定搜素一个短语,短语使用双引号标识,例如:q=title:"azure vs aws",指定搜索title中包含短语“azure vs aws”的文档;

在查询条件中,也可以指定操作符:+或-,操作符 + 用于指定返回的文档必须匹配查询条件;操作符 - 用于指定返回的文档不匹配查询条件;操作符之间以空格分隔,操作符是位于查询条件=号右侧,字段前面,例如 q=+title:azure -title:aws,指定搜索字段title中只能包含azure,不能包含aws;

3,默认操作符(default_operator)参数

在API中可以包含多个查询条件q,默认条件下,多个查询条件之间的关系是或(or)关系,例如:q=title:azure&q=content:azure,指定搜索title字段中包含azure关键字,或者content字段中包含azure关键字的文档。

查询条件之间的逻辑关系由默认操作符(default_operator)参数指定,默认值是or,该属性可以设置为and 或 or;

  • 当设置为or时,只要一个查询条件(q)满足,就返回文档;例如:q=title:azure&q=content:azure&default_operator=or
  • 当设置为and时,所有的查询条件都满足时,才返回文档;例如:q=title:azure&q=content:azure&default_operator=and

对于查询:q=title:(azure,aws)&q=content:(azure,aws),表示搜索文档的字段title或content,只要字段值中出现azure 或 aws关键字,就表示该文档匹配查询条件,作为查询结果返回。

4,投影字段(fields)参数

默认情况下,返回的每个文档都包括_index,_type,_id,_score和_source字段,投影参数 fields 用于指定返回的字段列表。在查询时,通过fields参数,指定一个以逗号分隔的字段列表,这些字段的store属性必须设置为true,或存在于_source字段中。默认情况下,fields字段的参数值是_source。可以指定一个或多个字段,字段之间以逗号分隔:

  • fields=title
  • fields=title,user

5,排序(sort)参数

排序(sort)参数,用于对结果进行排序,使ElasticSearch按照指定的字段对结果进行排序,值是fieldName:asc/fieldName:desc,默认是升序排序,可以有多个排序字段,排序字段之间以逗号分割,例如:sort=field1:asc,field:desc

6,其他参数

  • 解释(explain)参数:设置为true时,ElasticSearch将在结果中的文档中包含额外的解释信息;
  • 分页(from和size)参数,用于指定结果窗口,from参数指定结果从哪个记录开始返回,默认值是0;size参数定义了返回结果的最大文档数量,默认值是10,参数示例:from=10&size=15
  • 小写词条(lowercase_expanded_terms)参数:自动将词条转换成小写,默认值是true;
  • 分析通配符(analyze_wildcard)参数:通配符或前缀是否被分析,默认值是false;

六,查询请求

搜索API可以转换为查询请求,如下代码,查询请求的查询条件是词条查询,查询参合URI搜索的参数是对应的:

复制代码
GET /_search -d 
{  
   "from":0,
   "size":10,
   "sort":[  
      {"post_date":{"order":"asc"}},
      { "name":"desc" }
   ],
   "fields":[ "name","postDate","age"],
   "query":{  
      "term":{ "user":"kimchy"}
   }
}
复制代码

1,查询条件

在查询条件结点"query"中,指定查询的类型是词条(Term),在词条中指定查询的条件,例如,只要User中包含kimchy关键字,就满足查询条件:

"query" : {
        "term" : { "user" : "kimchy" }
}

2,排序

排序sort字段指定排序的字段及其排序的方向,并且排序值(Sort Value)作为查询结果返回:

"sort":[  
   {   "post_date":{   "order":"asc" }},
   {   "name":"desc"  }
]

排序的方向:升序asc,降序desc,对于_score字段,默认的排序方式是降序desc,对于其他字段,默认的排序方向是asc。

当对字符串字段进行排序时,该字段最好不被分词(analyzed或tokenized),如果字符串字段被分析,那么ElasticSearch引擎将随机选取字段的一个分词(Term)进行排序,这可能不是你想要的排序值。

3,投影,选取返回的字段

投影字段(fields),用来限制返回的字段,该字段必须存储在倒排索引中,也就是说,在索引映射中,该字段的store属性为ture。推荐使用_source字段,从文档源数据中,指定需要返回的字段。示例,使用_source 字段,控制结果hits数组中,每个文档_source字段必须返回的字段:

复制代码
{
    "_source": {
        "include": [ "filed1", "field2" ],
        "exclude": [ "field3" ]
    },
    "query" : {
        "term" : { "user" : "kimchy" }
    }
}
复制代码

4,窗口字段

窗口字段 from 和 size,用来限制返回的文档数量

 

参考文档:

Elasticsearch Reference [2.4] » Search APIs

Elasticsearch Reference [2.4] » Document APIs

Elasticsearch Reference [2.4] » Search APIs » URI Search






本文转自悦光阴博客园博客,原文链接:http://www.cnblogs.com/ljhdo/p/4486978.html,如需转载请自行联系原作者

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
目录
相关文章
|
8月前
|
缓存 监控 前端开发
顺企网 API 开发实战:搜索 / 详情接口从 0 到 1 落地(附 Elasticsearch 优化 + 错误速查)
企业API开发常陷参数、缓存、错误处理三大坑?本指南拆解顺企网双接口全流程,涵盖搜索优化、签名验证、限流应对,附可复用代码与错误速查表,助你2小时高效搞定开发,提升响应速度与稳定性。
|
9月前
|
移动开发 算法 API
淘宝/天猫:使用物流查询API实时显示包裹位置,减少客服咨询量
电商平台中物流咨询占客服工作40%以上,用户频繁追问包裹位置。本文介绍通过物流查询API实现包裹实时追踪,降低75.6%咨询量,提升用户体验与复购率,助力降本增效。(238字)
|
9月前
|
人工智能 JSON API
淘宝/天猫:使用物流查询API实时显示包裹位置,减少客服咨询量
在电商竞争激烈的环境下,淘宝、天猫通过集成物流查询API,实现实时追踪包裹位置,显著减少用户咨询量。本文解析其原理、实现步骤与效益,展示如何以技术手段提升用户体验、降低客服压力,助力平台高效运营。(238字)
|
8月前
|
人工智能 自然语言处理 测试技术
Apipost智能搜索:只需用业务语言描述需求,就能精准定位目标接口,API 搜索的下一代形态!
在大型项目中,API 数量庞大、命名不一,导致“找接口”耗时费力。传统工具依赖关键词搜索,难以应对语义模糊或命名不规范的场景。Apipost AI 智能搜索功能,支持自然语言查询,如“和用户登录有关的接口”,系统可理解语义并精准匹配目标接口。无论是新人上手、模糊查找还是批量定位,都能大幅提升检索效率,降低协作成本。从关键词到语义理解,智能搜索让开发者少花时间找接口,多专注核心开发,真正实现高效协作。
|
8月前
|
存储 API 数据库
按图搜索1688商品的API接口
本文介绍如何利用阿里云ImageSearch服务实现1688商品的按图搜索功能。通过提取图像特征向量并计算相似度,结合Flask搭建API接口,可快速构建基于图片的商品检索系统,提升电商用户体验。
|
8月前
|
JSON API 开发者
1688按关键词搜索商品的API接口技术指南
本文介绍如何使用1688开放平台API实现商品关键词搜索,涵盖API概述、权限申请、调用步骤、Python代码示例及注意事项,助力开发者高效集成商品搜索功能,适用于电商自动化、价格监控等场景,内容基于官方文档,确保准确可靠。
1131 0
|
8月前
|
存储 缓存 算法
亚马逊 SP-API 深度开发:关键字搜索接口的购物意图挖掘与合规竞品分析
本文深度解析亚马逊SP-API关键字搜索接口的合规调用与商业应用,涵盖意图识别、竞品分析、性能优化全链路。通过COSMO算法解析用户购物意图,结合合规技术方案提升关键词转化率,助力卖家实现数据驱动决策,安全高效优化运营。
|
8月前
|
存储 Linux iOS开发
Elasticsearch Enterprise 9.1.5 发布 - 分布式搜索和分析引擎
Elasticsearch Enterprise 9.1.5 (macOS, Linux, Windows) - 分布式搜索和分析引擎
578 0
|
9月前
|
JSON 自然语言处理 监控
淘宝关键词搜索与商品详情API接口(JSON数据返回)
通过商品ID(num_iid)获取商品全量信息,包括SKU规格、库存、促销活动、卖家信息、详情页HTML等。
|
9月前
|
JSON 前端开发 API
汽车配件:使用VIN码查询API精准匹配车型配件,提升用户信任
VIN码是汽车的唯一“身份证”,通过API可精准解析车型信息,实现配件99.5%以上匹配度。本文详解VIN码API的工作流程、技术实现与信任提升价值,助力汽配销售从经验判断迈向数据驱动,降低退货率,提升用户体验与复购。
1131 0