前言:

  前段时间在项目中使用了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简单总结(笔记)相关推荐

  1. 3.2.1 配置构建Angular应用——简单的笔记存储应用——展示功能

    本节我们会通过构建一个简单的笔记存储应用(可以载入并修改一组简单的笔记)来学习如何应用Angular的特性.这个应用用到的特性有: 在JSON文件中存储笔记 展示.创建.修改和删除笔记 在笔记中使用M ...

  2. 深度学习中反向传播算法简单推导笔记

    反向传播算法简单推导笔记 1.全连接神经网络 该结构的前向传播可以写成: z(1)=W(1)x+b(1)z^{(1)} = W^{(1)}x+b^{(1)}z(1)=W(1)x+b(1) a(1)=σ ...

  3. flex简单常用笔记

    flex简单常用笔记 多行换行操作: ul {display: flex;flex-direction: row;justify-content: space-between;flex-wrap: w ...

  4. 《Python编程 从入门到实践》简单读书笔记

    目录 第2章 变量和简单数据类型 第3章 列表简介 第4章 操作列表 第5章 if语句 第6章 字典 第7章 用户输入和while循环 第8章 函数 第9章 类 第10章 文件和异常 第11章 测试代 ...

  5. OSX上pf的简单配置笔记

    OSX上pf的简单配置笔记 水果的OSX上没有iptables,在10.10以后以pf取代ipfw.相比于iptables,pf一般使用配置文件保存防火墙规则,语法规范上更严谨,但是配置也更复杂.规则 ...

  6. Spring Data Querydsl-JPA 的简单入门笔记

    Spring Data Querydsl-JPA 的简单入门笔记 一. Querydsl面试常识问题 1.Querydsl是什么? 二.简单项目使用 1.pom依赖 2.新增插件,自动生成Q版实体类: ...

  7. 特征提取算法简单学习笔记

    update 2021.04.22 这几年的经验下来,以前以为特征提取的方法时共通的,注意力都在后续算法部分,现在的感受是,不同领域算法反而很多时候时共通的,特征提取差异很大,不能简单的一言以蔽之,这 ...

  8. C++ primer(第五版)简单读书笔记

    目录 第一章  开始 第二章 变量和基本类型 第三章 字符串.向量和数组 第四章 表达式 第五章 语句 第六章 函数 第七章 类 第八章 IO库 第九章 顺序容器 第十章 泛型算法 第十一章 关联容器 ...

  9. MFC Group Box 组合框的简单使用 笔记

    开发环境版本:Visual Studio 2010 应用程序类型:MFC application 1 组合框 Group Box作用 在MFC基于对话框的应用程序中,Group Box组合框就是将组合 ...

最新文章

  1. html2canvas源码修改,html2canvas把div保存高清图的方法代码
  2. powercfg -h off_驭鲛记的主演会是谁?肖战关系特别好的艺人朋友呢?白敬亭和吴映洁有没有故事啊?高伟光是不是隐婚生子了?讲讲管h和马司令呗?...
  3. Linux CentOS 7 安装 字体库文件(simsun.ttf、simheittf.ttf)
  4. bootstrap 兼容哪些浏览器
  5. 【运维小分享】整理Apache日志
  6. creo管道设计教程_Creo7.0设计探索在管道设计的应用
  7. AspNetPager分页控件报错“对象不支持此属性或方法”
  8. 全网最全sql入门经典
  9. SPSS方差分析应该如何进行
  10. 观点| 胡小明:不确定性环境下的智慧城市顶层设计
  11. 别说你不知道光纤有这七种类型!
  12. 图像坐标球面投影_坐标、投影及坐标转换
  13. matlab绘制图形中,常用函数调用(num2str,disp,gcf,hold on,plot,axis,subplot,line,stairs,grid,set,gca)
  14. 台式计算机的显卡,台式电脑显卡天梯图-台式机显卡性能排名
  15. HTML META 元数据标签详解
  16. 发展农村数字普惠金融的问题及对策分析
  17. (附源码)springboot家庭财务分析系统 毕业设计 641323
  18. 基于共享单车轨迹的自行车道规划(读书笔记)
  19. hss网元 java_在NB-IoT建构和流程中,作为网元实体的MME和HSS进行了哪些功能方面的升级?...
  20. C语言:scandir函数用法:枚举目录中指定的文件

热门文章

  1. JavaScript中的位置协议属性
  2. 已知有几个数据存放在BUF为首址的字节存储区中,试统计其中正数的个数,并将结果存入ZNUM单元中。
  3. 汇编语言-015(PROC伪指令定义参数方式、EXTERNDEF、INCLUDE 、EXTERN 、INVOKE、PROC、PROTO 、MOVSB 、MOVSD 、CMPSD )
  4. 多层感知机和神经网络的区别_学习笔记-从神经元到神经网络
  5. 忘记手势密码的解决办法
  6. linux下隐藏输入密码
  7. 28. 实现 strStr() golang
  8. c++对const增强 和cosnt分配内存情况
  9. C++创建对象:栈和堆的区别
  10. 【汇编语言】清华大学学堂在线《汇编语言程序设计》课程学习笔记