ES-基本使用

DSL语法

Elasticsearch提供了基于]SON的DSL (Domain Specific Language)来定义查询。常见的查询类型包括

  • 查询所有:查询出所有数据,一般测试用。例如:match all
  • 全文检索 (full text)查询: 利用分词器对用户输入内容分词,然后去倒排索引库中匹配。例如:
    • match query——搜索一个字段
    • multi match_query——可以搜索多个字段
  • 精确查询:根据精确词条值查找数据,一般是查找keyword、数值、日期、boolean等类型字段。例如:
    • ids
    • range
    • term
  • 地理 (geo)查询:根据经纬度查询。例如:
    • geo distance
    • geo bounding box
  • 复合 (compound)查询:复合查询可以将上述各种查询条件组合起来,合并查询条件。例如
    • bool
    • function score

查询的基本语法

查询的基本语法如下:

全文查询:

match_query语法如下:

GET _search
{
  "query": {
    "match": {
      "all": "外滩如家"
    }
  }
}

multi_match语法如下:

GET _search
{
  "query": {
    "multi_match": {
      "query": "外滩如家",
      "fields": ["brand","name","bussiness"]
    }   
  }
}

tips:推荐使用match_query方式,因为查询多个字段会浪费效率,建议利用copy_to把多个字段copy到一个字段里去查询


 精确查询

精确查询一般是查找keyword、数值、日期、boolean等类型字段。所以不会对搜索条件分词。常见的有:

  • term:根据词条精确值查询
  • range:根据值的范围查询

trem查询语法如下:

GET _search
{
  "query": {
    "term": {
      "city": {
        "value": "上海"
      }
    }
  }
}

range查询语法如下:

GET _search
{
  "query": {
    "range": {
      "price": {
        "gte": 10,
        "lte": 20
      }
    }
  }
}

tips:gte是大于等于,lte是小于等于,大于是gt,小于是lt


地理查询

根据经纬度查询,例如:

  • geo_bounding_box:查询geo_point值落在某个矩形范围内的所有文档
  • geodistance:查询到指定中心点小于某个距离值的所有文档

geo_bounding_box语法如下:

GET /hotel/_search
{
  "query": {
    "geo_bounding_box": {
      "location": {
        "top_left": {}
        "lat": 31.1,
        "lon": 121.5
      },
      "bottom_right": {
        "lat": 30.9,
        "lon": 121.7
      }
    }
  }
}

geodistance语法如下:

GET /hotel/_search
{
  "query": {
    "geo_distance": {
      "distance": "15km".
      "location": "31.21,121.5"
    }
  }
}

复合查询

复合(compound)查询: 复合查询可以将其它简单查询组合起来,实现更复杂的搜索逻辑,例如:

  • fuction score: 算分函数查询,可以控制文档相关性算分,控制文档排名。例如百度竞价
  • Boolean Query: 布尔查询

Function score query的语法如下:

Boolean Query

布尔查询是一个或多个查询子句的组合。子查询的组合方式有:

  • must:必须匹配每个子查询,类似“与'
  • should:选择性匹配子查询,类似“或
  • must_not:必须不匹配,不参与算分,类似“非”
  • filter:必须匹配,不参与算分

小练习:利用bool查询实现功能

需求:搜索名字包含“如家”,价格不高于400,在坐标31.21,121.5周围10km范围内的酒店。

GET /hotel/_search
{
  "query": {
    "bool": {
      "must": [
        {"term":{"name": "如家"}}
      ],
      "must_not": [
        {"range":{"price":{"gt":400}}}
      ],
      "filter": [
        {"geo_distance": {
          "distance": 10,
          "distance_unit": "km",
          "location": {"lat": 31.21,"lon": 121.5}
        }}
      ]
    }
  }
}

 

搜索结果处理

elasticsearch支持对搜索结果排序,默认是根据相关度算分( score) 来排序。可以排序字段类型有: keyword类型

数值类型、地理坐标类型、日期类型等。

普通类型排序语法格式:

经纬度类型排序语法格式:

小练习:对酒店数据按照用户评价降序排序,评价相同按照价格升序排

GET /hotel/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "score": {
        "order": "desc"
      },
      "price": {
        "order": "asc"
      }
    }
  ]
}

小练习:实现对酒店数据按照到你的位置坐标的距离升序排序

获取经纬度的方式:https://lbsamap.com/demo/isapi-v2/example/map/click-to-get-lnglat/

#找到121.612282,31.034661周围的酒店,距离升序排序
GET /hotel/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "_geo_distance": {
        "location": {
          "lat": 31.034661,
          "lon": 121.612282
        },
        "order": "asc",
        "unit": "km"
      }
    }
  ]
}

 

分页

es中有三种方式实现分页查询,如下:

  • from + size:

优点:支持随机翻页

缺点:深度分页问题,默认查询上限 (from+size)是10000场景:百度、京东、谷歌、淘宝这样的随机翻页搜索

  • after search:

优点:没有查询上限(单次查询的size不超过10000)

缺点:只能向后逐页查询,不支持随机翻页场景:没有随机翻页需求的搜索,例如手机向下滚动翻页

  • scroll:

优点:没有查询上限(单次查询的size不超过10000)

缺点:会有额外内存消耗,并且搜索结果是非实时的场景:海 量数据的获取和迁移。不推荐。

from+size模式

elasticsearch 默认情况下只返回top10的数据。而如果要查询更多数据就需要修改分页参数了。

elasticsearch中通过修改from、size参数来控制要返回的分页结果

语法格式如下:

GET /hotel/_search
{
  "query": {
    "match_all": {}
  },
  "from": 990,//分页开始的数据
  "size": 10,//期望获取的文档总数
  "sort": [
    {"price": "asc"}
  ]
}

因为es底层采用的是倒排索引,所以其实是不利于做分页查询的,所以它这里采用的是逻辑分页

单点时,比如要查询990到1000的数据,那么就需要查询出前1000条,然后截取后面10条数据

但是如果在集群中,那么这种方式就不适用了,集群模式请看下面:

注意:search after有一个缺点,就是分页的时候只能向后查,不能查前面的页


高亮

高亮:就是在搜索结果中把搜索关键字突出。

显示原理是这样的:

  • 将搜索结果中的关键字用标签标记出来
  • 在页面中给标签添加Css样式

语法如下:

 tips:默认情况下,ES搜索字段必须要和高亮字段一致才能显示高亮,如果想要不一致,可以再"pre_tags"配置标签前添加"request_fileId_match:"fasle"


 RestClient查询文档

快速入门

match_all的API如下:

  对响应的结果进行解析

 matchmultiMatch的API

boolean,mustfilter的API:

 排序和分页的API

 

 

万能幼年旅店
关注 关注
  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
ES(Elasticsearch)概述及基本使用方法
weixin_68138130的博客
11-09 4920
ES(Elasticsearch)概述及基本使用方法
elasticsearch-analysis-ik-8.11.0
11-27
在Elasticsearch 8.11.0中,IK插件的配置和使用通常涉及以下步骤: 1. 安装:将`elasticsearch-analysis-ik-8.11.0.jar`文件放入Elasticsearch的`plugins`目录下,并确保所有依赖项(如`httpclient-4.5.13.jar`、`...
ES基本使用
pshdhx的博客
07-10 9563
elasticsearch的基础语法+聚合函数+IK分词器+java的API的高阶调用
ES的介绍和使用
最新发布
weixin_45621552的博客
08-21 2078
​ Elastic Search 简称ES,是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。自定义查询的命名规则:方法名必须是其中之一开始,后面接字段名以及条件,条件之间的组合使用and或者or, 方法参数必须与使用的字段一一匹配//文章标题模糊查询,并且ID在给定的范围之内@Test。
ES(Elasticsearch)的基本使用
学习笔记
01-03 3831
elasticsearch的基本认识,以及springboot整合es的内容
es基本使用
sinat_41878445的博客
01-25 1960
配置 @Configuration @Slf4j public class ElasticSearchConfig { /** * 使用的协议 */ final static String schema = "http"; /** * 链接超时时间 */ final static int connectTimeOut = 6000; /** * 链接超时时间 */ final static in
ES基本用法
qq_41536778的博客
03-30 3180
ES基本概念 1> 集群和节点 一个es集群是由一个或多和es节点组成的集合 每一个集群都有一个名字, 如之前的wali 每个节点都有自己的名字, 如之前的master, slave1, slave2 节点是可以存储数据, 参与索引数据等的独立服务 2> 索引(类似于数据库里面的database) 索引是含有相同属性的文档集合 索引在es中是通过一个...
elasticsearch-analysis-ik-7.10.0.zip下载
05-08
使用过程中,可以通过Elasticsearch的配置文件(如elasticsearch.yml)设置分词器参数,或者在创建索引时指定分词器类型。 总的来说,"elasticsearch-analysis-ik-7.10.0.zip"是Elasticsearch 7.10.0版的一个关键...
elasticsearch-analysis-pinyin-7.10.1 elasticsearch-analysis-ik-7
06-20
这是Elasticsearch插件的元数据文件,其中包含了插件的基本信息,如插件名称、版本、作者、描述等,用于Elasticsearch识别和管理插件。 总的来说,这些文件组合在一起,构建了一个完整的Elasticsearch中文处理环境...
bitnami-docker-elasticsearch-exporter:用于Elasticsearch-exporter的Bitnami Docker映像
03-10
什么是Elasticsearch Exporter? Prometheus导出器,用于有关ElasticSearch的各种指标。 TL; DR $ docker run --name elasticsearch-exporter bitnami/elasticsearch-exporter:latest 为什么要使用Bitnami Images...
elasticsearch-analysis-ik-7.16.2.zip
10-02
《Elasticsearch分词器:elasticsearch-analysis-ik-7.16.2深度解析》 ...理解并熟练掌握IK分词器的使用,能够极大地提升Elasticsearch在中文环境下的检索性能,为大数据分析和信息检索带来显著提升。
es介绍和基本用法
热门推荐
tang_yu_mac的博客
11-01 1万+
ElasticSearch 引言 1.在海量数据中执行搜索功能时,如果使用MySQL, 效率太低。 2.如果关键字输入的不准确,一样可以搜索到想要的数据。 3.将搜索关键字,以红色的字体展示。 介绍: es是一个使用java语言并且基于Lucene编写的搜索引擎框架,提供了分布式的全文搜索功能,提供了一个统一的基于restful风格的web接口。 haystack:全文检索的框架,支持whoosh、solr、Xapian、Elasticsearc四种全文检索引擎,点击查看官方网站。 whoosh:纯Pyt
(十)ES 入门教程
taoge512的博客
05-11 8199
本文为学习笔记,主要用于记录本人学习过程。部分内容为转载!!!!. 1、 ElasticSearch介绍 1.1 介绍 官方网址:https://www.elastic.co/cn/products/elasticsearch Github:https://github.com/elastic/elasticsearch 总结: 1、elasticsearch是一个基于Lucene的高扩展的分布式搜索服务器,支持开箱即用。 2、elasticsearch隐藏了Lucene的复杂性,对外提供Rest
ElasticSearch基本使用
我们仍未知道那天所见花的名字,但是她的香味却留在我心间
08-21 3013
Elaticsearch,简称为eses是一个,它可以近乎;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。es使用lava开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的来隐藏Lucene的复杂性,从而让全文搜索变得简单。据国际权威的数据库产品评测机构DB Engines的统计,在2016年1月,ElasticSearch已超过Solr等,成为排名第一的搜索引擎类应用。它用于以及将这三者混合使用
Elasticsearch搜索引擎(一)——基础使用
qq_43409401的博客
12-31 1598
Elasticsearch是一个接近实时的分布式搜索平台。
Elasticsearch基本用法(一)——简介
余额一个亿
01-14 314
参考:ES基本用法
第三章 ES基础操作
ping的博客
04-05 919
使用ES构建搜索引擎的第一步是创建索引。在创建索引时,可以按照实际需求对索引进行主分片和副分片设置。ES创建索引的请求类型为PUT,其请求形式如下变量index_name就是创建的目标索引名称;可以在settings子句内部填写索引相关的设置项,如主分片个数和副分片个数等(主分片个数使用的是系统默认值(默认值为5),并且没有使用副分片个数(默认值为0));可以在mappings子句内部填写数据组织结构,即数据映射。在有些场景下,某个索引暂时不使用,但是后期可能又会使用,这里的使用是指数据写入和数据搜索。
Elasticsearch基本用法
杨小扬的专栏
05-30 482
一、ES介绍 官方:开源搜索:Elasticsearch、ELK Stack 和 Kibana 的开发者 | Elastic Github:
详解ES使用
weixin_43889339的博客
03-14 2334
序言 什么时候你会想用ES呢?大数据处理分析?离线数据分析?在线近实时查询?这些场景都指向了ESES的特点是大数据量查询、近实时。ES的原理是倒排索引,即按照分词,将<关键字段,记录ID>做成索引。下面我会介绍ESJava工程的具体使用,在demo中演示插入、查询的操作: ES工具类 Service类 Test类 POM的引用 配置中心配置 基本ES操作指令 一、ES工具类 model 查询条件 查询方法 model 层 @Data @Document(indexName = "d
使用Elasticsearch-Head进行数据操作指南
"这篇文档介绍了如何使用Elasticsearch-Head插件进行数据操作,包括检查文档存在、新建文档、局部更新、完整更新、删除文档以及搜索文档等基本操作。" 在Elasticsearch中,Elasticsearch-Head是一个非常实用的可视...
写文章

热门文章

  • Quartz.Net技术教学:构建高效的任务调度系统 2645
  • EF6(Entity Framework 6)基础知识 2498
  • jiebaNET中文分词器 1868
  • Elasticsearch (1):ES基本概念和原理简单介绍 1293
  • MySQL如何定位慢查询以及使用EXPLAIN对SQL进行性能分析 1187

分类专栏

  • 前端 1篇
  • springcloud学习笔记 6篇
  • MySQL学习笔记 3篇

最新评论

  • SQL-触发器(trigger)的详解以及代码演示

    CSDN-Ada助手: MySQL入门 技能树或许可以帮到你:https://edu.csdn.net/skill/mysql?utm_source=AI_act_mysql

  • Vue事件总线(EventBus)的概念、使用以及注意事项

    ha_lydms: 文章干货满满!作者在阐述每个知识点时,都力求详尽且清晰,使得读者可以轻松理解并掌握。

  • MySQL如何定位慢查询以及使用EXPLAIN对SQL进行性能分析

    CSDN-Ada助手: 推荐 MySQL入门 技能树:https://edu.csdn.net/skill/mysql?utm_source=AI_act_mysql

  • VUE3组合式API

    普通网友: 写的很好!我也写了一篇获取【大厂面试真题解析、核心开发学习笔记、最新全套讲解视频、实战项目源码讲义、学习路线简历模板】的文章

  • MVCC的实现

    CSDN-Ada助手: 恭喜作者第20篇博客《MVCC的实现》发表!您的持续创作精神让人钦佩。建议下一步可以深入探讨MVCC在数据库中的应用场景和优势,或者结合实际案例进行分析,让读者更好地理解和应用MVCC技术。期待您更多的精彩内容,加油!

最新文章

  • SQL-触发器(trigger)的详解以及代码演示
  • Vue事件总线(EventBus)的概念、使用以及注意事项
  • JWT权限验证
2024年14篇
2023年19篇

目录

目录

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳坪山网站建设公司网站产品页面优化建议濮阳seo网站优化推广安徽网站优化网站优化外包乐云seo都江堰网站优化选哪家优化方案教考资源网站鹰潭百度网站优化河北网站优化推广代运营会泽网站优化河南官网seo网站优化技术网站优化时间表西安网站优化有限公司黄岩台州优化网站推广东莞做网站优化上海哪个网站做优化好芝罘智能响应式网站优化公司成都整站优化网站网站优化营销推广大概多少钱优化网站的内部链接和外部链接湖州网站seo优化服务中宁农产品网站优化潜江工厂网站优化哪家好宁波网站搜索引擎优化荆门品牌网站优化怎么做什么叫网站优化具体指哪些湘西网站综合优化网站产品优化称赞火26星至下城区网站优化费用优化网站公司如何优化让网站排名靠前香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

深圳坪山网站建设公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化