Elasticsearch 利用API进行搜索

本文涉及的产品
Elasticsearch Serverless检索通用型,资源抵扣包 100CU*H
简介: Elasticsearch 利用API进行搜索

ES 在搜索上对外开放了 Resultful API, 方便各个语言调用,那么他调用有两种方式,一种就是单纯将搜索的参数放到url上,还有就是可以放到Request Body里面,我们来依次看看。

URL Search 路由携带参数搜索

GET movies/_search?q=love&df=title&sort=year:asc&from=0&size=10
{
  "profile": "true"
}

我们来对上面的url分析一下,movies是索引,_search表示我们要进行搜索

  1. q 指定查询内容
  2. df 指定查询字段
  3. sort 指定字段排序
  4. from 偏移量
  5. size 获取数据量 与from联合使用 做分页的
  6. 下面有个profile 是为了查询执行过程
  • or 查询
# 等效为or查询
GET movies/_search?q=title:(Beautiful OR Mind)
{
  "profile": "true"
}
  • and 查询
GET movies/_search?q=title:(Beautiful AND Mind)
{
  "profile": "true"
}
  • 范围查询
GET movies/_search?q=year:[2018 TO 2019]
{
  "profile": "true"
}

[] 为闭区间,{} 为开区间

year:[2018 TO 2019],查询时间在2018-2019年的电影

  • 模糊查询

"Avengers War"~2 ,AvengersWar 之间有两个 term,匹配 Avengers: Infinity War - Part I,不能匹配 Avengers: War

GET /movies/_search?q=title:"Avengers War"~2
{
  "profile": "true"
}

Request Body Search 请求体携带Json搜索

其实在高阶使用方法上只有 Request Body Search 才能实现,所以也是推荐使用这种方法查询学习。

POST test/_search
{
  "profile": "true",
  "_source": ["name", "date"], # 指定展示的字段
  "from": 0, # 分页偏移
  "size": 20, # 总共获取20
  "sort": [ # 排序
    {
      "date": {
        "order": "desc"
      }
    }
  ],
  "query": {
    "match_all": {} # 查询所有文档
  }
}

Match 查询表达式

POST test/_search
{
  "query": {
    "match": {
      "name": "王    五"
    }
  }
}

这样会匹配到name字段中带或者带的文档,类似于 OR 关系,如果你只需要王五的话,可以添加and操作

POST test/_search
{
  "query": {
    "match": {
      "name": {
        "query": "王五",
        "operator": "and"
      }
    }
  }
}

Match Phrase

通过使用 query-match_phrase 实现 Phrase 查询,query 的词必须按照顺序排列,slop 实现模糊查询,slop=1,表示中间可以有一个字符

POST test/_search
{
  "query": {
    "match_phrase": {
      "tag": {
        "query": "java php"
      }
    }
  }
}

这个顺序就不能反,否则查询不到。那如果需要查tagjava,laravel 中间是随意字符的话就需要slop

这样就是实现中间模糊查询。

Request Body Search中间 match, match_phrase, term的区别

  • term

term结构化字段查询,匹配一个值,且输入的值不会被分词器分词。

{
    "query":{
        "term":{
            "foo": "hello world"
        }
    }
}

那么只有在字段中存储了hello world的数据才会被返回,如果在存储时,使用了分词,原有的文本“I say hello world”会被分词进行存储,不会存在“hello world”这整个词,那么不会返回任何值。

但是如果使用“hello”作为查询条件,则只要数据中包含“hello”的数据都会被返回,分词对这个查询影响较大。

  • match_phase

查询确切的语句,在对查询字段定义了分词器的情况下,会使用分词器对输入进行分词,然后返回满足下述两个条件的文档

  1. match_phase中的所有term都出现在待查询字段之中
  2. 待查询字段之中的所有term都必须和match_phase具有相同的顺序
{ "foo":"I just said hello world" }
{ "foo":"Hello world" }
{ "foo":"World Hello" }

使用match_phase:

{
  "query": {
    "match_phrase": {
      "foo": "Hello World"
    }
  }
}

会返回前两条文档。

  • match

模糊匹配,先对输入进行分词,对分词后的结果进行查询,文档中只要包含match查询条件的一部分就会返回

  • query_string

query_string语法查询,同match_phase的相同点在于,输入的查询条件会被分词,但是不同之处在与文档中的数据可以不用和query_string中的查询条件有相同的顺序。

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
10天前
|
API 开发者 Python
如何在API中实现搜索和过滤功能
本文介绍了如何为API添加搜索和过滤功能,使其更强大灵活。通过Flask示例,展示了按书名搜索、按作者或年份过滤书籍的方法,并结合两者实现复合查询。同时,提供了搜索不区分大小写、支持多过滤器组合、分页和输入验证等最佳实践。最后推荐了Apipost工具,它能简化API调试、负载测试及文档生成,提升开发效率。这些功能帮助用户更好地控制数据,优化API使用体验。
|
29天前
|
存储 供应链 监控
1688商品数据实战:API搜索接口开发与供应链分析应用
本文详细介绍了如何通过1688开放API实现商品数据的获取与应用,涵盖接入准备、签名流程、数据解析存储及商业化场景。开发者可完成智能选品、价格监控和供应商评级等功能,同时提供代码示例与问题解决方案,确保法律合规与数据安全。适合企业开发者快速构建供应链管理系统。
|
10天前
|
人工智能 算法 安全
OpenRouter 推出百万 token 上下文 AI 模型!Quasar Alpha:提供完全免费的 API 服务,同时支持联网搜索和多模态交互
Quasar Alpha 是 OpenRouter 推出的预发布 AI 模型,具备百万级 token 上下文处理能力,在代码生成、指令遵循和低延迟响应方面表现卓越,同时支持联网搜索和多模态交互。
119 1
OpenRouter 推出百万 token 上下文 AI 模型!Quasar Alpha:提供完全免费的 API 服务,同时支持联网搜索和多模态交互
|
2月前
|
机器学习/深度学习 人工智能 Serverless
👉「免费满血DeepSeek实战-联网搜索×Prompt秘籍|暨6平台横评」
满血 DeepSeek 免费用!支持联网搜索!创作声明:真人攥写-非AI生成,Written-By-Human-Not-By-AI
3122 10
👉「免费满血DeepSeek实战-联网搜索×Prompt秘籍|暨6平台横评」
|
1月前
|
JavaScript 前端开发 API
JavaScript中通过array.map()实现数据转换、创建派生数组、异步数据流处理、复杂API请求、DOM操作、搜索和过滤等,array.map()的使用详解(附实际应用代码)
array.map()可以用来数据转换、创建派生数组、应用函数、链式调用、异步数据流处理、复杂API请求梳理、提供DOM操作、用来搜索和过滤等,比for好用太多了,主要是写法简单,并且非常直观,并且能提升代码的可读性,也就提升了Long Term代码的可维护性。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
2月前
|
JSON API 数据格式
关键词搜索爱回收商品列表API接口(爱回收API系列)
爱回收作为二手电子产品交易平台,提供丰富的商品资源。其API接口允许开发者通过关键词搜索商品列表,获取商品名称、类别、品牌、预估回收价格等信息,支持分页展示和自定义每页数量。接口采用HTTP GET请求,响应格式为JSON。以下是Python示例代码,展示如何使用该接口进行搜索。
|
2月前
|
JSON 搜索推荐 API
淘宝拍立淘按图搜索商品API接口示例说明
淘宝拍立淘按图搜索商品API接口是淘宝开放平台提供的一项基于图像识别技术的搜索服务,允许用户通过上传图片来快速找到相似的商品。以下是对该API接口的示例说明:
|
4月前
|
数据采集 人工智能 运维
从企业级 RAG 到 AI Assistant,阿里云Elasticsearch AI 搜索技术实践
本文介绍了阿里云 Elasticsearch 推出的创新型 AI 搜索方案
292 3
从企业级 RAG 到 AI Assistant,阿里云Elasticsearch AI 搜索技术实践
|
3月前
|
缓存 API 开发者
京东按图搜索商品(拍立淘)API接口系列(京东API)
京东按图搜索商品(拍立淘)API 接口(.jd.item_search_img)通过上传图片搜索京东平台上的相似商品,基于图像识别技术提供便捷的商品搜索方式。适用于电商平台展示、比价等场景。响应参数包括公共参数、商品信息及搜索结果相关参数,方便分页展示和了解整体搜索规模。Python 请求示例展示了如何使用该接口进行图片搜索。
195 15
|
3月前
|
人工智能 自然语言处理 搜索推荐
云端问道12期实操教学-构建基于Elasticsearch的企业级AI搜索应用
本文介绍了构建基于Elasticsearch的企业级AI搜索应用,涵盖了从传统关键词匹配到对话式问答的搜索形态演变。阿里云的AI搜索产品依托自研和开源(如Elasticsearch)引擎,提供高性能检索服务,支持千亿级数据毫秒响应。文章重点描述了AI搜索的三个核心关键点:精准结果、语义理解、高性能引擎,并展示了架构升级和典型应用场景,包括智能问答、电商导购、多模态图书及商品搜索等。通过实验部分,详细演示了如何使用阿里云ES搭建AI语义搜索Demo,涵盖模型创建、Pipeline配置、数据写入与检索测试等步骤,同时介绍了相关的计费模式。