Elasticsearch 利用API进行搜索

简介: 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中的查询条件有相同的顺序。

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
目录
相关文章
|
3月前
|
缓存 监控 前端开发
顺企网 API 开发实战:搜索 / 详情接口从 0 到 1 落地(附 Elasticsearch 优化 + 错误速查)
企业API开发常陷参数、缓存、错误处理三大坑?本指南拆解顺企网双接口全流程,涵盖搜索优化、签名验证、限流应对,附可复用代码与错误速查表,助你2小时高效搞定开发,提升响应速度与稳定性。
|
4月前
|
机器学习/深度学习 JSON 监控
淘宝拍立淘按图搜索与商品详情API的JSON数据返回详解
通过调用taobao.item.get接口,获取商品标题、价格、销量、SKU、图片、属性、促销信息等全量数据。
|
5月前
|
缓存 API 网络架构
淘宝item_search_similar - 搜索相似的商品API接口,用python返回数据
淘宝联盟开放平台中,可通过“物料优选接口”(taobao.tbk.dg.optimus.material)实现“搜索相似商品”功能。该接口支持根据商品 ID 获取相似推荐商品,并返回商品信息、价格、优惠等数据,适用于商品推荐、比价等场景。本文提供基于 Python 的实现示例,包含接口调用、数据解析及结果展示。使用时需配置淘宝联盟的 appkey、appsecret 和 adzone_id,并注意接口调用频率限制和使用规范。
|
3月前
|
人工智能 自然语言处理 测试技术
Apipost智能搜索:只需用业务语言描述需求,就能精准定位目标接口,API 搜索的下一代形态!
在大型项目中,API 数量庞大、命名不一,导致“找接口”耗时费力。传统工具依赖关键词搜索,难以应对语义模糊或命名不规范的场景。Apipost AI 智能搜索功能,支持自然语言查询,如“和用户登录有关的接口”,系统可理解语义并精准匹配目标接口。无论是新人上手、模糊查找还是批量定位,都能大幅提升检索效率,降低协作成本。从关键词到语义理解,智能搜索让开发者少花时间找接口,多专注核心开发,真正实现高效协作。
|
3月前
|
存储 API 数据库
按图搜索1688商品的API接口
本文介绍如何利用阿里云ImageSearch服务实现1688商品的按图搜索功能。通过提取图像特征向量并计算相似度,结合Flask搭建API接口,可快速构建基于图片的商品检索系统,提升电商用户体验。
365 0
|
3月前
|
JSON API 开发者
1688按关键词搜索商品的API接口技术指南
本文介绍如何使用1688开放平台API实现商品关键词搜索,涵盖API概述、权限申请、调用步骤、Python代码示例及注意事项,助力开发者高效集成商品搜索功能,适用于电商自动化、价格监控等场景,内容基于官方文档,确保准确可靠。
343 0
|
3月前
|
存储 缓存 算法
亚马逊 SP-API 深度开发:关键字搜索接口的购物意图挖掘与合规竞品分析
本文深度解析亚马逊SP-API关键字搜索接口的合规调用与商业应用,涵盖意图识别、竞品分析、性能优化全链路。通过COSMO算法解析用户购物意图,结合合规技术方案提升关键词转化率,助力卖家实现数据驱动决策,安全高效优化运营。
|
3月前
|
存储 Linux iOS开发
Elasticsearch Enterprise 9.1.5 发布 - 分布式搜索和分析引擎
Elasticsearch Enterprise 9.1.5 (macOS, Linux, Windows) - 分布式搜索和分析引擎
336 0
|
4月前
|
JSON 自然语言处理 监控
淘宝关键词搜索与商品详情API接口(JSON数据返回)
通过商品ID(num_iid)获取商品全量信息,包括SKU规格、库存、促销活动、卖家信息、详情页HTML等。
|
4月前
|
JSON 监控 Java
Elasticsearch 分布式搜索与分析引擎技术详解与实践指南
本文档全面介绍 Elasticsearch 分布式搜索与分析引擎的核心概念、架构设计和实践应用。作为基于 Lucene 的分布式搜索引擎,Elasticsearch 提供了近实时的搜索能力、强大的数据分析功能和可扩展的分布式架构。本文将深入探讨其索引机制、查询 DSL、集群管理、性能优化以及与各种应用场景的集成,帮助开发者构建高性能的搜索和分析系统。
341 0