ElastciSearch简单总结(笔记)
前言:
前段时间在项目中使用了es,作为一个当前比较流行的分布式搜索引擎,在学习和使用它的过程中,踩了不少坑,这篇文章先简单整理了一下,后续会整理一下之前踩过的一些坑。
1. ElastciSearch是什么
ElasticSearch是一个基于Apache Lucene的开源搜索引擎。它不仅仅是Lucene和全文搜索,我们还能这样去描述他:
- 分布式的实时文件存储,每个字段都被索引并可被搜索
- 分布式的实时搜索引擎
- 可以扩展到上百台服务器
2. ElasticSearch的安装与配置
安装方法网上很多,http://blog.csdn.net/whxaing2011/article/details/18237733
配置:elasticsearch.yml
3. 与ElasticSearch的交互
ElasticSearch提供多种语言的客户端API,详见
ElasticSearcg为.NET用户提供了三种客户端,
- ElasticSearch.NET
一个非常底层且灵活的客户端
- NEST
ElasticSearch的官方客户端,具有非常简洁的API。可以映射所有请求和响应对象,拥有一个强类型查询DSL。依赖ElasticSearch.NET客户端。
- PlainElastic.Net
PlainElastic.net是一个Github开源项目。关于它和ElasticSearch.NET/NEST的活跃度对比。
4. 面向文档
ElasticSearch是面向文档的,在ES中可以对文档(而非成行成列的数据)进行索引、搜索、排序、过滤。这种理解数据的方式和以往关系型数据库不同,这也是ES能够执行复杂的全文搜索的原因之一。
5. 对索引的理解
在ElasticSearch中存储数据的行为就叫做索引(Index),前面所说的文档归属于不同种类型(Type),而这些类型存在于索引。
数据库->表->行->列 对应es中 索引->类型->文档->字段
索引的创建
语法:
PUT /indextest/people/1 {"name":"张三","age": 25,"sex": "男","interests":["体育", "音乐"] }
通过HTTP的GET方法来检索文档,同样的,可以通过DELETE方法来删除文档,如果想要更新就在PUT一次。
6. 搜索
语法:GET /indextest/people/1
DELETE /indextest /people/1
简单搜索
搜索全部的病人信息
语法:GET /elasticsearch1/patient/_search
这里,我们在结尾使用关键字_search来取代原来的文档ID。返回的结果中hits数组中包含了我们所有的文档。
接下来,让我们搜索年龄大于35的患者
GET /elasticsearch1/patient/_search?q=Pat_Age:>35
这种方法叫做查询字符串(query string)搜索,像传递URL参数一样传递语句
使用DSL语句查询
查询字符串搜索有局限性,ES还提供了丰富灵活的查询语言叫做DSL查询,它可以构建更加复杂强大的查询。DSL以JSON请求体的形式出现。
GET /elasticsearch1/patient/_search {"query" : {"range" : {"Pat_Age" : {"gt": 35}}} }
更复杂的查询
GET /elasticsearch1/patient/_search {"query" : {"bool": {"must": [{"term": {"Pat_Marital": {"value": "已婚"}}},{"range" : {"Pat_Age" : {"gt": 35}}}]}} }
加过滤器
GET /elasticsearch1/patient/_search {"query" : {"filtered": {"query": {"bool": {"must": [ {"term": {"Pat_Marital": {"value": "已婚" }}},{"range" : {"Pat_Age" : {"gt": 35 }}}]}},"filter": {"term": {"Pat_Gender": "男" }}}} }
ElasticSearch也提供了这种特殊的缓存,filter cache来存储filters得到的结果集。此外,缓存filters不需要太多的内存(它只保留一种信息,即哪些文档与filter相匹配),同时它可以由其它的查询复用,极大地提升了查询的性能。
并非所有的filters都会缓存,默认情况下,如下的filters不会被缓存:
Query查询对象会将所有的条件绑定到一起存储到缓存中,只要有一个条件改变就不能重用。
全文搜索
接下来介绍全文搜索—一种传统数据库不好实现的搜索
如搜索所有得糖尿病又得高血压的病人
GET /patientcase/patientcase/_search {"query" : {"match" : {"Case_HDSD00_11_076" : "高血压糖尿病" }} }
如下,用<em></em>来标识匹配到的单词高亮
GET /patientcase/patientcase/_search {"query" : {"match" : {"Case_HDSD00_11_076" : "高血压糖尿病" }},"highlight": {"fields" : {"Case_HDSD00_11_076" : {} }} }
query_string
参数:
这里只挑几个常用的参数说一下,其他的一般默认就够了
query:需要查询的具体内容
default_field:查询的字段
default_operator:默认运算符
GET /patientcase/patientcase/_search {"query" : {"query_string":{"default_field":"name","query":"张*" }} }
聚合
ES可以通过聚合做一些分析统计
GET /elasticsearch1/patient/_search {"filter": {"has_child": {"type": "adm","query": {"term": {"Adm_AdmDiagnos": {"value": "高血压" }}}}},"aggs" : {"avg_age" : {"terms" : { "field" : "Pat_Gender" } }} }
相关资料:
Mastering Elasticsearch(中文版) http://udn.yyuap.com/doc/mastering-elasticsearch/index.html
ElasticSearch权威中文版 https://es.xiaoleilu.com/
ElasticSearch英文API https://www.elastic.co/guide/en/elasticsearch/client/index.html
ES相关插件 http://www.cnblogs.com/huangfox/p/3541300.html
转载于:https://www.cnblogs.com/felix-hpp/p/8939934.html
ElastciSearch简单总结(笔记)相关推荐
- 3.2.1 配置构建Angular应用——简单的笔记存储应用——展示功能
本节我们会通过构建一个简单的笔记存储应用(可以载入并修改一组简单的笔记)来学习如何应用Angular的特性.这个应用用到的特性有: 在JSON文件中存储笔记 展示.创建.修改和删除笔记 在笔记中使用M ...
- 深度学习中反向传播算法简单推导笔记
反向传播算法简单推导笔记 1.全连接神经网络 该结构的前向传播可以写成: z(1)=W(1)x+b(1)z^{(1)} = W^{(1)}x+b^{(1)}z(1)=W(1)x+b(1) a(1)=σ ...
- flex简单常用笔记
flex简单常用笔记 多行换行操作: ul {display: flex;flex-direction: row;justify-content: space-between;flex-wrap: w ...
- 《Python编程 从入门到实践》简单读书笔记
目录 第2章 变量和简单数据类型 第3章 列表简介 第4章 操作列表 第5章 if语句 第6章 字典 第7章 用户输入和while循环 第8章 函数 第9章 类 第10章 文件和异常 第11章 测试代 ...
- OSX上pf的简单配置笔记
OSX上pf的简单配置笔记 水果的OSX上没有iptables,在10.10以后以pf取代ipfw.相比于iptables,pf一般使用配置文件保存防火墙规则,语法规范上更严谨,但是配置也更复杂.规则 ...
- Spring Data Querydsl-JPA 的简单入门笔记
Spring Data Querydsl-JPA 的简单入门笔记 一. Querydsl面试常识问题 1.Querydsl是什么? 二.简单项目使用 1.pom依赖 2.新增插件,自动生成Q版实体类: ...
- 特征提取算法简单学习笔记
update 2021.04.22 这几年的经验下来,以前以为特征提取的方法时共通的,注意力都在后续算法部分,现在的感受是,不同领域算法反而很多时候时共通的,特征提取差异很大,不能简单的一言以蔽之,这 ...
- C++ primer(第五版)简单读书笔记
目录 第一章 开始 第二章 变量和基本类型 第三章 字符串.向量和数组 第四章 表达式 第五章 语句 第六章 函数 第七章 类 第八章 IO库 第九章 顺序容器 第十章 泛型算法 第十一章 关联容器 ...
- MFC Group Box 组合框的简单使用 笔记
开发环境版本:Visual Studio 2010 应用程序类型:MFC application 1 组合框 Group Box作用 在MFC基于对话框的应用程序中,Group Box组合框就是将组合 ...
最新文章
- html2canvas源码修改,html2canvas把div保存高清图的方法代码
- powercfg -h off_驭鲛记的主演会是谁?肖战关系特别好的艺人朋友呢?白敬亭和吴映洁有没有故事啊?高伟光是不是隐婚生子了?讲讲管h和马司令呗?...
- Linux CentOS 7 安装 字体库文件(simsun.ttf、simheittf.ttf)
- bootstrap 兼容哪些浏览器
- 【运维小分享】整理Apache日志
- creo管道设计教程_Creo7.0设计探索在管道设计的应用
- AspNetPager分页控件报错“对象不支持此属性或方法”
- 全网最全sql入门经典
- SPSS方差分析应该如何进行
- 观点| 胡小明:不确定性环境下的智慧城市顶层设计
- 别说你不知道光纤有这七种类型!
- 图像坐标球面投影_坐标、投影及坐标转换
- matlab绘制图形中,常用函数调用(num2str,disp,gcf,hold on,plot,axis,subplot,line,stairs,grid,set,gca)
- 台式计算机的显卡,台式电脑显卡天梯图-台式机显卡性能排名
- HTML META 元数据标签详解
- 发展农村数字普惠金融的问题及对策分析
- (附源码)springboot家庭财务分析系统 毕业设计 641323
- 基于共享单车轨迹的自行车道规划(读书笔记)
- hss网元 java_在NB-IoT建构和流程中,作为网元实体的MME和HSS进行了哪些功能方面的升级?...
- C语言:scandir函数用法:枚举目录中指定的文件
热门文章
- JavaScript中的位置协议属性
- 已知有几个数据存放在BUF为首址的字节存储区中,试统计其中正数的个数,并将结果存入ZNUM单元中。
- 汇编语言-015(PROC伪指令定义参数方式、EXTERNDEF、INCLUDE 、EXTERN 、INVOKE、PROC、PROTO 、MOVSB 、MOVSD 、CMPSD )
- 多层感知机和神经网络的区别_学习笔记-从神经元到神经网络
- 忘记手势密码的解决办法
- linux下隐藏输入密码
- 28. 实现 strStr() golang
- c++对const增强 和cosnt分配内存情况
- C++创建对象:栈和堆的区别
- 【汇编语言】清华大学学堂在线《汇编语言程序设计》课程学习笔记