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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/392614.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

记一次ArrayList产生的线上OOM问题

前言&#xff1a;本以为(OutOfMemoryError)OOM问题会离我们很远&#xff0c;但在一次生产上线灰度的过程中就出现了Java.Lang.OutOfMemoryError:Java heap space异常&#xff0c;通过对线上日志的查看&#xff0c;最终定位到ArrayList#addAll方法中&#xff0c;出现这个问题的原…

leetcode 222. 完全二叉树的节点个数(dfs)

给出一个完全二叉树&#xff0c;求出该树的节点个数。说明&#xff1a;完全二叉树的定义如下&#xff1a;在完全二叉树中&#xff0c;除了最底层节点可能没填满外&#xff0c;其余每层节点数都达到最大值&#xff0c;并且最下面一层的节点都集中在该层最左边的若干位置。若最底…

css 计算属性的应用_如何使用一点CSS Grid魔术设计计算器应用

css 计算属性的应用by Deepika Gunda由Deepika Gunda 如何使用一点CSS Grid魔术设计计算器应用 (How to use a little CSS Grid magic to design a calculator app) This article is a quick intro to CSS Grid. We will be making a calculator using it.本文是CSS Grid的快速…

vc调试大全

一、调试基础 调试快捷键 F5&#xff1a; 开始调试 ShiftF5: 停止调试 F10&#xff1a; 调试到下一句&#xff0c;这里是单步跟踪 F11&#xff1a; 调试到下一句&#xff0c;跟进函数内部 ShiftF11: 从当前函数中跳出 CtrlF10: 调试到光标所在位置 F9&#xff1a; …

Google-Guava-EventBus源码解读

Guava是Google开源的一个Java基础类库&#xff0c;它在Google内部被广泛使用。Guava提供了很多功能模块比如&#xff1a;集合、并发库、缓存等&#xff0c;EventBus是其中的一个module&#xff0c;本篇结合EventBus源码来谈谈它的设计与实现。 概要 首先&#xff0c;我们先来预…

leetcode 1370. 上升下降字符串

给你一个字符串 s &#xff0c;请你根据下面的算法重新构造字符串&#xff1a; 从 s 中选出 最小 的字符&#xff0c;将它 接在 结果字符串的后面。 从 s 剩余字符中选出 最小 的字符&#xff0c;且该字符比上一个添加的字符大&#xff0c;将它 接在 结果字符串后面。 重复步骤…

mysql 设置事物自动提交_mysql事务自动提交的问题

1&#xff1a;mysql的aut0commit配置默认是开启的&#xff0c;也就是没执行一条sql都会提交一次&#xff0c;就算显示的开启事务也会导致多条SQL不在一个事务中&#xff0c;如果需要相关的SQL在同一个事务中执行&#xff0c;那么必须将autocommit设置为OFF&#xff0c;再显式开…

rest laravel_如何通过测试驱动开发来构建Laravel REST API

rest laravelby Kofo Okesola由Kofo Okesola 如何通过测试驱动开发来构建Laravel REST API (How to build a Laravel REST API with Test-Driven Development) There is a famous quote by James Grenning, one of the pioneers in TDD and Agile development methodologies:T…

python之numpy

numpy是一个多维的数组对象&#xff0c;类似python的列表&#xff0c;但是数组对象的每个元素之间由空格隔开。 一、数组的创建 1.通过numpy的array(参数)&#xff0c;参数可以是列表、元组、数组、生成器等 由arr2和arr3看出&#xff0c;对于多维数组来说&#xff0c;如果最里…

git 上传

转载于:https://www.cnblogs.com/benbentu/p/6543154.html

Liferay 部署war包时候的deployDirectory 细节分析

引入&#xff1a; 在上文中&#xff0c;我们从宏观上讲解了Liferay部署war包的动作是如何触发监听器并且完成部署过程的&#xff0c;但是其中最核心的一块deployDirectory我们没讲&#xff0c;它的作用是当有了临时目录并且已经把war包的内容展开到该目录之后&#xff0c;是如何…

leetcode 164. 最大间距(桶排序)

给定一个无序的数组&#xff0c;找出数组在排序之后&#xff0c;相邻元素之间最大的差值。 如果数组元素个数小于 2&#xff0c;则返回 0。 示例 1: 输入: [3,6,9,1] 输出: 3 解释: 排序后的数组是 [1,3,6,9], 其中相邻元素 (3,6) 和 (6,9) 之间都存在最大差值 3。 示例 2: …

批处理定时mysql备份数据库_定时备份mysql数据库的批处理

定时备份mysql数据库的批处理代码&#xff0c;保存为backup_mysql.bat&#xff0c;运行即可。复制代码 代码如下:echo offset txt1%date:~0,4%::当前年set txt2%date:~5,2%::当前月set txt3%date:~8,2%::当前日set txt4%time:~0,2%::当前小时set txt5%time:~3,2%::当前分钟set …

算法训练营 重编码_您在编码训练营期间可能面临的最大挑战

算法训练营 重编码by Joanna Gaudyn乔安娜高登(Joanna Gaudyn) 您在编码训练营期间可能面临的最大挑战 (The biggest struggles you might face during a coding bootcamp) You think that during a coding bootcamp nothing can be more challenging than learning programmi…

1449 砝码称重(思维)

题目链接&#xff1a;https://www.51nod.com/onlineJudge/submitDetail.html#!judgeId259281 题解&#xff1a;这题有一个技巧&#xff0c;毕竟是w^0,w^1,w^2....这样&#xff0c;必然会想到w进制&#xff0c;而且就只能用一次。 那么就简单了&#xff0c;把m拆成w进制&#xf…

leetcode 454. 四数相加 II(哈希表)

给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) &#xff0c;使得 A[i] B[j] C[k] D[l] 0。 为了使问题简单化&#xff0c;所有的 A, B, C, D 具有相同的长度 N&#xff0c;且 0 ≤ N ≤ 500 。所有整数的范围在 -228 到 228 - 1 之间&#xf…

“换标”Intel的穷则思变

成语有云“穷则思变”&#xff0c;用这个词来形容早先的Intel换标也最恰当不过。当然这里“穷”&#xff0c;不是说Intel很贫穷&#xff0c;而是说Intel在自己的产业到了尽头。Intel推产品概念的水平是一流的&#xff0c;虽然某些概念事后被认为是错误的&#xff08;如&#xf…

mysql开发中遇到的坑_mysql优化过程中遇见的坑(mysql优化问题特别注意)

单条查询最后添加 LIMIT 1&#xff0c;停止全表扫描。对于char(4) 或者vachar(4)&#xff0c;无论是中文还是英文都是存储四个字符&#xff0c;注意是字符而不是字节。如果一个字段未int类型&#xff0c;此类型只有0、1两个状态&#xff0c;需要为此建立索引吗&#xff1f;过度…

初级开发人员的缺点_在您作为初级开发人员的第一年获得此建议

初级开发人员的缺点Are you a junior developer embarking on your software development career?您是从事软件开发事业的初级开发人员吗&#xff1f; Or a recent computer science graduate who has recently started a new job?还是最近刚开始从事新工作的计算机科学专业…

Spark日志分析

根据tomcat日志计算url访问了情况&#xff0c;具体的url如下&#xff0c; 要求&#xff1a;区别统计GET和POST URL访问量 结果为&#xff1a;访问方式、URL、访问量 输入文件&#xff1a; 196.168.2.1 - - [03/Jul/2014:23:36:38 0800] "GET /course/detail/3.htm HTTP/1.…