博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ElastciSearch简单总结(笔记)
阅读量:6251 次
发布时间:2019-06-22

本文共 4396 字,大约阅读时间需要 14 分钟。

前言:

  前段时间在项目中使用了es,作为一个当前比较流行的分布式搜索引擎,在学习和使用它的过程中,踩了不少坑,这篇文章先简单整理了一下,后续会整理一下之前踩过的一些坑。 

1. ElastciSearch是什么

  ElasticSearch是一个基于Apache Lucene的开源搜索引擎。它不仅仅是Lucene和全文搜索,我们还能这样去描述他:

    • 分布式的实时文件存储,每个字段都被索引并可被搜索
    • 分布式的实时搜索引擎
    • 可以扩展到上百台服务器

2. ElasticSearch的安装与配置

  安装方法网上很多,

  配置: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(中文版)  

      ElasticSearch权威中文版  

   ElasticSearch英文API  

      ES相关插件  

 

转载于:https://www.cnblogs.com/felix-hpp/p/8939934.html

你可能感兴趣的文章
总结系列_14(OpenCV2.4.3的新特征以及安装方法)
查看>>
虚拟地址空间分配
查看>>
HDU 4465 - Candy(概率与数学优化)
查看>>
提高你的Java代码质量吧:使用构造函数协助描述枚举项
查看>>
Struts2 学习笔记20 类型转换part2 写自己的转换器
查看>>
网站接入支付宝
查看>>
mybatis+spring配置
查看>>
新浪微博客户端(31)-显示相册图片上的GIF标记
查看>>
idea 项目打包发布
查看>>
x:Name 与 Name 有时候是不一样的。
查看>>
【ASP.NET】如何在asp后台实现弹出对话框
查看>>
XSS (Cross Site Scripting) Prevention Cheat Sheet(XSS防护检查单)
查看>>
Windows下将程序打包为安装包(最为简易的方式)
查看>>
这个月干啥去了?——H5+移动应用实战开发
查看>>
GMT时间转换为当地时间的方法
查看>>
分布式拒绝服务攻击 DDoS
查看>>
Netstat命令详解
查看>>
软件测试面试题整理
查看>>
Jmeter-Maven-Plugin高级应用:Proxy Configuration
查看>>
20. Spring Boot Servlet【从零开始学Spring Boot】
查看>>