`

elasticsearch从安装到入门

阅读更多
安装jdk之后
es下载: https://www.elastic.co/downloads/elasticsearch
解压 /usr/local/elasticsearch/es-5.1.2
运行./bin/elasticsearch 即可
异常:
Caused by: java.lang.RuntimeException: can not run elasticsearch as root
解决
创建elsearch用户组及elsearch用户
[root@SHB-L0039546 es-5.1.2]# groupadd elsearch
[root@SHB-L0039546 es-5.1.2]# useradd es -g elsearch -p zookeeper123

更改elasticsearch文件夹及内部文件的所属用户及组为 elsearch:es
cd  /usr/local/
chown -R es:elsearch  elasticsearch

切换到elsearch用户再启动
su - es
cd /usr/local/elasticsearch/es-5.1.2
./bin/elasticsearch
后台启动 + -d

异常:
java.lang.UnsupportedOperationException: seccomp unavailable: CONFIG_SECCOMP not compiled into kernel, CONFIG_SECCOMP and CONFIG_SECCOMP_FILTER are needed
elasticsearch-5.0.1 只支持内核3.5以上版本的linux操作系统
centos6.5报错

验证安装
再命令行执行
curl 'http://localhost:9200/?pretty'
出现结果
{
  "name" : "kGsFjdu",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "6K-D_etVQ_GAvgsGUNhRfA",
  "version" : {
    "number" : "5.1.2",
    "build_hash" : "c8c4c16",
    "build_date" : "2017-01-11T20:18:39.146Z",
    "build_snapshot" : false,
    "lucene_version" : "6.3.0"
  },
  "tagline" : "You Know, for Search"
}
表示结果正常

es使用
在megacorp索引中给employee类型增加一条记录id为1
curl -XPUT 'http://localhost:9200/megacorp/employee/1' -d'
{
    "first_name" : "John",
    "last_name" :  "Smith",
    "age" :        25,
    "about" :      "I love to go rock climbing",
    "interests": [ "sports", "music" ]
}';
curl -XPUT 'http://localhost:9200/megacorp/employee/2' -d'
{
    "first_name" :  "Jane",
    "last_name" :   "Smith",
    "age" :         32,
    "about" :       "I like to collect rock albums",
    "interests":  [ "music" ]
}';
curl -XPUT 'http://localhost:9200/megacorp/employee/3' -d'
{
    "first_name" :  "Douglas",
    "last_name" :   "Fir",
    "age" :         35,
    "about":        "I like to build cabinets",
    "interests":  [ "forestry" ]
}';

查询megacorp索引下employee类型id为1的记录
curl -XGET 'http://localhost:9200/megacorp/employee/1'
查询所有信息
curl -XGET 'http://localhost:9200/megacorp/employee/_search'
简单条件查询
curl -XGET 'http://localhost:9200/megacorp/employee/_search?q=last_name:Smith'
match 查询法
curl -XGET 'http://localhost:9200/megacorp/employee/_search' -d'
{
    "query" : {
        "match" : {
            "last_name" : "Smith"
        }
    }
}'
结构化搜索的限定条件 filter(过滤器):
{
    "query" : {
        "filtered" : {
            "filter" : {
                "range" : {
                    "age" : { "gt" : 30 } <1>
                }
            },
            "query" : {
                "match" : {
                    "last_name" : "Smith" <2>
                }
            }
        }
    }
}

下面2种的区别是 第一种是分词之后匹配 第二种是全词匹配
{
    "query" : {
        "match" : {
            "about" : "rock climbing"
        }
    }
}

{
    "query" : {
        "match_phrase" : {
            "about" : "rock climbing"
        }
    }
}
高亮搜索
{
    "query" : {
        "match_phrase" : {
            "about" : "rock climbing"
        }
    },
    "highlight": {
        "fields" : {
            "about" : {}
        }
    }
}

分组统计
1.统计每个兴趣爱好有几个人
{
  "aggs": {
    "all_interests": {
      "terms": { "field": "interests" }
    }
  }
}
结果
{
   ...
   "hits": { ... },
   "aggregations": {
      "all_interests": {
         "buckets": [
            {
               "key":       "music",
               "doc_count": 2
            },
            {
               "key":       "forestry",
               "doc_count": 1
            },
            {
               "key":       "sports",
               "doc_count": 1
            }
         ]
      }
   }
}
2.查询结果再分组
{
  "query": {
    "match": {
      "last_name": "smith"
    }
  },
  "aggs": {
    "all_interests": {
      "terms": {
        "field": "interests"
      }
    }
  }
}
结果
...
  "all_interests": {
     "buckets": [
        {
           "key": "music",
           "doc_count": 2
        },
        {
           "key": "sports",
           "doc_count": 1
        }
     ]
  }
3.分组之后再统计 select avg(age),interests from employee where ... group by interests
{
    "aggs" : {
        "all_interests" : {
            "terms" : { "field" : "interests" },
            "aggs" : {
                "avg_age" : {
                    "avg" : { "field" : "age" }
                }
            }
        }
    }
}
结果
  ...
  "all_interests": {
     "buckets": [
        {
           "key": "music",
           "doc_count": 2,
           "avg_age": {
              "value": 28.5
           }
        },
        {
           "key": "forestry",
           "doc_count": 1,
           "avg_age": {
              "value": 35
           }
        },
        {
           "key": "sports",
           "doc_count": 1,
           "avg_age": {
              "value": 25
           }
        }
     ]
  }

除此之外还有很多功能,比如建议、地理定位、过滤、模糊以及部分匹配等

我们通过将HTTP后的请求方式由 PUT 改变为 GET 来获取文档,
同理,我们也可以将其更换为 DELETE 来删除这个文档,
HEAD 是用来查询这个文档是否存在的。
如果你想替换一个已经存在的文档,你只需要使用 PUT 再次发出请求即可

es集群
master 节点无需参与文档层面的变更和搜索,这意味着仅有一个 master 节点并不会因流量增长而成为瓶颈
作为用户,我们可以访问包括 master 节点在内的集群中的任一节点。每个节点都知道各个文档的位置,
并能够将我们的请求直接转发到拥有我们想要的数据的节点。无论我们访问的是哪个节点,
它都会控制从拥有数据的节点收集响应的过程,并返回给客户端最终的结果。这一切都是由 Elasticsearch 透明管理的

集群健康
集群健康(cluster health)。它的 status 有 green、yellow、red 三种;
GET /_cluster/health
状态 意义
green 所有主分片和从分片都可用
yellow 所有主分片可用,但存在不可用的从分片
red     存在不可用的主要分片

在Elasticsearch中,每一个字段都会默认被建立索引。也就是说,每一个字段都会有一个反向索引以便快速搜索。
而且,与大多数其他数据库不同的是ES可以在同一个查询中使用所有的反向索引,以惊人的速度返回查询结果。

文档元数据
_index
选择一个索引的名字。这个名称必须要全部小写,也不能以下划线开头,不能包含逗号
_type
_id
id是一个字符串,当它与_index以及_type组合时,就可以来代表Elasticsearch中一个特定的文档。我们创建了一个新的文档时,你可以自己提供一个_id,或者也可以让Elasticsearch帮你生成一个。

索引Id的生成策略
1.自己定义ID使用方法
PUT /{index}/{type}/{id}
{
  "field": "value",
  ...
}
2.es自动生成自增长
POST /website/blog/
{
  "title": "My second blog entry",
  "text":  "Still trying this out...",
  "date":  "2014/01/01"
}
自生成ID是由22个字母组成的,安全 universally unique identifiers 或者被称为UUIDs

在任意的查询字符串中添加pretty参数,类似上面的请求,Elasticsearch就可以得到优美打印的更加易于识别的JSON结果。
_source字段不会执行优美打印,它的样子取决于我们录入的样子

GET请求的返回结果中包含{"found": true}。这意味着这篇文档确实被找到了。如果我们请求了一个不存在的文档,我们依然会得到JSON反馈,只是found的值会变为false。
同样,HTTP返回码也会由'200 OK'变为'404 Not Found'。我们可以在curl后添加-i,这样你就能得到反馈头文件:

通常,GET请求会将整个文档放入_source字段中一并返回。但是可能你只需要title字段。你可以使用_source得到指定字段。如果需要多个字段你可以使用逗号分隔:
GET /website/blog/123?_source=title,text
现在_source字段中就只会显示你指定的字段:
{
  "_index" :   "website",
  "_type" :    "blog",
  "_id" :      "123",
  "_version" : 1,
  "exists" :   true,
  "_source" : {
      "title": "My first blog entry" ,
      "text":  "Just trying this out..."
  }
}

或者你只想得到_source字段而不要其他的元数据,你可以这样请求:
GET /website/blog/123/_source
这样结果就只返回:
{
   "title": "My first blog entry",
   "text":  "Just trying this out...",
   "date":  "2014/01/01"
}

检查文档是否存在
如果确实想检查一下文档是否存在,你可以试用HEAD来替代GET方法,这样就是会返回HTTP头文件:

curl -i -XHEAD /website/blog/123
如果文档存在,Elasticsearch将会返回200 OK的状态码:

HTTP/1.1 200 OK
Content-Type: text/plain; charset=UTF-8
Content-Length: 0
如果不存在将会返回404 Not Found状态码:

curl -i -XHEAD /website/blog/124
HTTP/1.1 404 Not Found
Content-Type: text/plain; charset=UTF-8
Content-Length: 0
当然,这个反馈只代表了你查询的那一刻文档不存在,但是不代表几毫秒后它不存在,很可能与此同时,另一个进程正在创建文档。

更新整个文档
在Documents中的文档是不可改变的。所以如果我们需要改变已经存在的文档,
我们可以使用《索引》中提到的indexAPI来重新索引或者替换掉它:
PUT /website/blog/123
{
  "title": "My first blog entry",
  "text":  "I am starting to get the hang of this...",
  "date":  "2014/01/02"
}
在反馈中,我们可以发现Elasticsearch已经将_version数值增加了:

{
  "_index" :   "website",
  "_type" :    "blog",
  "_id" :      "123",
  "_version" : 2,
  "created":   false <1>
}
created被标记为 false是因为在同索引、同类型下已经存在同ID的文档。
在内部,Elasticsearch已经将旧文档标记为删除并且添加了新的文档。旧的文档并不会立即消失,但是你也无法访问他。Elasticsearch会在你继续添加更多数据的时候在后台清理已经删除的文件。
在本章的后面,我们将会在《局部更新》中介绍最新更新的API。这个API允许你修改局部,但是原理和下方的完全一样:
从旧的文档中检索JSON
修改它
删除修的文档
索引一个新的文档
唯一不同的是,使用了updateAPI你就不需要使用get然后再操作index请求了。
分享到:
评论

相关推荐

    ElasticSearch入门到精通(基于ELK技术栈ElasticSearch7.8.版本).rar

    **Elasticsearch 入门到精通** Elasticsearch 是一个高度可扩展的开源全文搜索引擎,设计用于处理大量数据,提供实时分析和搜索功能。它基于 Lucene 库,但提供了更高级别的分布式、RESTful 风格的搜索和数据分析...

    《ElasticSearch入门到实战》电子书,从入门到进阶实战项目的教程文档,框架SpringBoot框架整合ES.zip

    **Elasticsearch 入门与实战** Elasticsearch 是一个基于 Lucene 的开源全文搜索引擎,以其分布式、可扩展性、实时搜索以及强大的数据分析能力而受到广泛欢迎。它不仅支持文本搜索,还可以处理结构化和非结构化数据...

    (狂神)ElasticSearch快速入门笔记,ElasticSearch基本操作以及爬虫(Java-ES仿京东实战)

    (狂神)ElasticSearch快速入门笔记,ElasticSearch基本操作以及爬虫(Java-ES仿京东实战),包含了小狂神讲的东西,特别适合新手学习,笔记保存下来可以多看看。好记性不如烂笔头哦~,ElasticSearch,简称es,es是一个...

    ElasticSearch入门.pdf

    本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。es也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得...

    ElasticStack(ELK)从入门到实践.pdf

    综合案例分析通常涵盖整个Elastic Stack的使用流程,包括配置Filebeat、Logstash,以及利用ElasticSearch、Kibana来完成从数据采集、处理到分析和可视化的整个链路。在实践中,用户可以根据自己的业务需求,通过这些...

    ElasticSearch入门到精通到运维全套资料

    全套 elasticsearch从入门到精通到运维 基于ES5.6版本 有视频 文档 快速上手

    elasticsearch视频教程从入门到精通

    elasticsearch视频教程从入门到精通,文档里面有百度网盘的地址和提取码。

    Elasticsearch入门教程

    ### Elasticsearch入门教程知识点详解 #### 一、Elasticsearch安装与基本操作 1. **解压目录结构**: - 在解压后的Elasticsearch目录中,通常包含多个子目录和文件,例如`bin`目录包含了启动脚本,`config`目录...

    es入门操作-elasticsearch入门操作

    "Elasticsearch 入门操作" Elasticsearch 是一个基于 Lucene 库的搜索引擎,提供了一个分布式、支持多用户的全文搜索引擎,具有 HTTP Web 接口和无模式 JSON 文档。所有其他语言可以使用 RESTful API 通过端口 9200...

    Elasticsearch7.8零基础入门进阶视频教程02.rar

    Elasticsearch7.8零基础入门进阶视频教程

    Elasticsearch入门学习笔记

    这篇入门学习笔记将引导初学者了解如何安装、配置以及使用Elasticsearch。 首先,让我们从安装开始。要安装Elasticsearch,你可以访问官方网站(https://www.elastic.co/cn/downloads/elasticsearch)下载最新版本...

    Elasticsearch 6.1官方入门教程.rar

    1. **安装与配置**:Elasticsearch的安装通常涉及下载最新版本的软件包,解压并配置`elasticsearch.yml`配置文件。6.1版本可能包含了一些优化的默认设置,例如内存分配和插件管理,确保更好的启动和运行体验。 2. *...

    ElasticSearch实战教程

    "ElasticSearch实战教程" ElasticSearch是一款分布式、RESTful 风格的搜索和数据分析引擎,能够达到近实时搜索,稳定,可靠,快速...本教程旨在帮助您快速入门ElasticSearch,掌握ElasticSearch的基本概念和实战应用。

    Elasticsearch7.8X 入门到精通

    001 - 开篇.mp4 002 - 技术选型.mp4 003 - 教学大纲.mp4 008 - 入门 - HTTP - 索引 - 创建.mp4 009 - 入门 - HTTP - 索引 - 查询 & 删除.mp4 010 - 入门 - HTTP - 文档 - 创建 (Put & ...025 - 入门 - JavaAPI - 文档

    bboss-elasticsearch开发环境搭建和开发入门视频教程.

    1. **搭建bboss elasticsearch开发环境.wmv**: 这个视频将指导你完成从安装Elasticsearch到配置BBoss的全过程,确保你的开发环境正确无误。 2. **bboss elasticsearch开发入门教程.wmv**: 通过实例演示,讲解如何...

    ElasticSearch分布式全文检索入门视频教程

    03_Elasticsearch如何安装以及相关插件的介绍 04_什么是倒排索引 05_Elasticsearch 单模式下API的增删改查操作 06_Elasticsearch 批量获取mget 07_Elasticsearch 批量操作bulk 08_Elasticsearch 版本控制version 09_...

    Elasticsearch7.8零基础入门进阶视频教程05.rar

    Elasticsearch7.8零基础入门进阶视频教程05 解压密码 www.itjc8.com&@xe0@35LWeY*

    elasticsearch java客户端Jest入门实例

    第一步:启动一个elasticsearch服务,bin目录下的elasticsearch.bat 第二步:建索引,执行MusicReviewIndex中的单元测试方法index() 第三步:检索测试,执行MusicReviewSearch中的单元测试方法search() 本实例基于: ...

    springboot+elasticsearch,入门最详细的项目

    在本项目"springboot+elasticsearch"中,开发者提供了一个全面的入门教程,涵盖了Elasticsearch的基本操作,包括增、删、改、查等基本功能,这对于初学者理解这两者如何协同工作非常有帮助。 首先,让我们深入了解...

    ES搜索快速入门

    首先,你需要从Elasticsearch官网下载对应版本的安装包,解压后在命令行中进入bin目录,然后运行`elasticsearch`命令启动服务。如果一切正常,你将在控制台看到ES的启动信息。 ### 三、Maven配置 在Java项目中使用...

Global site tag (gtag.js) - Google Analytics