博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
elasticsearch
阅读量:6691 次
发布时间:2019-06-25

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

hot3.png

一、elasticsearch 简介

1、elasticsearch 是一个基于Lucene的实时的分布式搜索和分析引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。基于RESTful接口。

2、Elasticsearch的用户

–GitHub,Wikipedia,ebay等.../

3、ES VS SOLR

–接口
•类似webservice的接口
•REST风格的访问接口
–分布式存储
•solrCloud solr4.x才支持
•es是为分布式而生的
–支持的格式
•solr xml json
•es json
–近实时搜索

4、Rest简介

•Representational State Transfer
•一种软件架构风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

123454_NVaS_2828556.png

5、ES内置的REST接口

123557_5C6H_2828556.png

6、ES和关系型数据库的数据对比

123629_02Vm_2828556.png

二、ES Linux下 集群的简单安装  

1、准备环境:  java版本要求:最低1.7

2、以node01、node02 、node03 为例

1)、解压安装包

2)、配置conf/elasticsearch.yml 文件

##集群名字,每台机器要相同cluster.name: liuhj##每个节点的名字node.name: node-1##当前主机地址network.host: 192.168.47.11##防止脑裂配置discovery.zen.ping.multicast.enabled: falsediscovery.zen.ping_timeout: 120sclient.transport.ping_timeout: 60s##ip为每个节点的ip地址discovery.zen.ping.unicast.hosts: ["192.168.47.11","192.168.47.12", "192.168.47.13"]

3)、将 es解压包分发到node02、node03 上

4)、更改es 包 属主属组 

chown  -R node01:node01  elasticsearch-2.2.0

5)、在node01 下启动es  ;  注:在每台机器上启动,es之前发生过安全问题所以不能再root用户下启动,启动会报错,如果启动了,将logs文件删除,在非root用户下启动

bin/elasticsearch

es就安装完了,下面进行测试

6、测试查看是否启动成功

http://node01:9200/_cluster/health?pretty

{  "cluster_name" : "liuhaijing",  "status" : "green",  "timed_out" : false,  "number_of_nodes" : 3,  "number_of_data_nodes" : 3,  "active_primary_shards" : 0,  "active_shards" : 0,  "relocating_shards" : 0,  "initializing_shards" : 0,  "unassigned_shards" : 0,  "delayed_unassigned_shards" : 0,  "number_of_pending_tasks" : 0,  "number_of_in_flight_fetch" : 0,  "task_max_waiting_in_queue_millis" : 0,  "active_shards_percent_as_number" : 100.0}

说明成功了

三、在es上安装Kibana 和 all Marvel  对es进行监控

Step 1: Install Marvel into Elasticsearch:bin/plugin install licensebin/plugin install marvel-agentStep 2: Install Marvel into Kibanabin/kibana plugin --install elasticsearch/marvel/2.2.0Step 3: Start Elasticsearch and Kibanabin/elasticsearchbin/kibanaStep 4: Navigate to http://localhost:5601/app/marvel

测试

访问  http://node01:5601/app/marvel地址

124405_cdK7_2828556.png

出现上面的截图说明插件安装成功了

四、ES的使用

创建索引库:

curl -XPUT   http://node01:9200/bjsxt/

130026_ukPO_2828556.png

130041_ONZn_2828556.png

默认是由两个副本  5个分片

130058_ALln_2828556.png

CURL创建索引

#创建索引curl -XPOST http://node01:9200/bjsxt/employee/3 -d '{"first_name" : "John","last_name" : "Smith","age" : 25,"about" : "I love to go rock climbing","interests": [ "sports", "music" ]}'

130316_JfXf_2828556.png

解释:bjsxt:对应索引库(index) 相当于关系型数据库中的库employee:对应type   :相当于关系型数据库中的表3:对应document   :相当一关系型数据库中的一条数据'{"first_name" : "John","last_name" : "Smith","age" : 25,"about" : "I love to go rock climbing","interests": [ "sports", "music" ]}'    : 对应filed :相当于关系型数据库中的记录

PUT 和POST用法

•PUT是幂等方法(执行多少次效果都是相同的),POST不是。所以PUT用于更新、POST用于新增比较合适。•创建索引注意事项•索引库名称必须要全部小写,不能以下划线开头,也不能包含逗号•如果没有明确指定索引数据的ID,那么es会自动生成一个随机的ID,需要使用POST参数curl -XPOST http://node01:9200/bjsxt/emp/ -d '{"first_name" : "John"}'
•如果想要确定我们创建的都是全新的内容–1:使用自增ID–2:在url后面添加参数•curl -XPUT http://node01:9200/bjsxt/emp/2?op_type=create -d '{"name":"zs","age":25}'•curl -XPUT http://noed01:9200/bjsxt/emp/2/_create -d '{"name":"laoxiao","age":25}'–如果成功创建了新的文档,Elasticsearch将会返回常见的元数据以及201 Created的HTTP反馈码。而如果存在同名文件,Elasticsearch将会返回一个409 Conflict的HTTP反馈码

GET查询索引

–根据员工id查询curl -XGET http://node01:9200/bjsxt/employee/1?pretty–在任意的查询字符串中添加pretty参数,es可以得到易于识别的json结果。–curl后添加-i 参数,这样你就能得到反馈头文件curl -i 'http://node01:9200/bjsxt/emp/2?pretty'

pretty: 优雅的格式

拿出emp下的所有的数据 curl -i 'http://node01:9200/bjsxt/emp/_search?pretty'带条件的查询curl -XGET http://node01:9200/bjsxt/employee/1?_source=name,age或者 curl -XGET 'http://node01:9200/bjsxt/employee/1?_source=name,age&pretty'
•GET查询索引–检索文档中的一部分,如果只需要显示指定字段, curl -XGET 'http://node01:9200/bjsxt/employee/1?_source=name,age&pretty–如果只需要source的数据curl -XGET http://node01:9200/bjsxt/employee/1/_source–查询所有curl -XGET http://node01:9200/bjsxt/employee/_search–你可以再返回的hits 中发现我们录入的文档。搜索会默认返回最前的10个数值。–根据条件进行查询curl -XGET 'http://node01:9200/bjsxt/employee/_search?q=last_name:Smith&pretty'
MGET查询•使用mget API获取多个文档curl -XGET http://node01:9200/_mget?pretty -d '{"docs":[{"_index":"bjsxt","_type":"emp","_id":2,"_source":"name"},{"_index":"website","_type":"blog","_id":2}]}'
•HEAD使用•如果只想检查一下文档是否存在,你可以使用HEAD来替代GET方法,这样就只会返回HTTP头文件curl -i -XHEAD http://node01:9200/bjsxt/employee/1
•Elasticsearch的删除•curl -XDELETE http://localhost:9200/bjsxt/emp/4/•如果文档存在,es会返回200 ok的状态码,found属性值为true,_version属性的值+1•found属性值为false,但是_version属性的值依然会+1,这个就是内部管理的一部分,它保证了我们在多个节点间的不同操作的顺序都被正确标记了•注意:删除一个文档也不会立即生效,它只是被标记成已删除。Elasticsearch将会在你之后添加更多索引的时候才会在后台进行删除内容的清理If you use the Delete by Query API, after upgrading to 2.0, just install the plugin and then  follow its documentation:  bin/plugin install delete-by-query

 

安装ik分词器

五、项目实战:

java api连接  es

新建项目,导入必要的jar

import org.elasticsearch.client.Client;import org.elasticsearch.client.support.Headers;import org.elasticsearch.client.transport.TransportClient;import org.elasticsearch.common.settings.Settings;import org.elasticsearch.common.transport.InetSocketTransportAddress;import java.net.InetAddress;import java.net.UnknownHostException;/** * Created by root on 2016/11/9. */public class test {    public static void main(String[] args) throws UnknownHostException {        Settings  settings = Settings.settingsBuilder()                .put("cluster.name","liuhaijing").build();        Client  client  = TransportClient.builder().settings(settings).build()                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("node01"),9300))                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("node02"),9300))                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("node03"),9300));        client.close();    }}

 

•Elasticsearch的java API–索引index(四种json,map,bean,es helpers)•IndexResponse response = client.prepareIndex(“bjsxt", "emp", "1").setSource().execute().actionGet();–查询get•GetResponse response = client.prepareGet(“bjsxt", "emp", "1").execute().actionGet();–更新update–更新或者插入upsert–删除delete•DeleteResponse response = client.prepareDelete(“bjsxt", "emp", "1").execute().actionGet();–总数count•long count = client.prepareCount(“bjsxt").execute().get().getCount();
import org.elasticsearch.action.delete.DeleteResponse;import org.elasticsearch.action.get.GetResponse;import org.elasticsearch.action.index.IndexResponse;import org.elasticsearch.client.Client;import org.elasticsearch.client.transport.TransportClient;import org.elasticsearch.common.settings.Settings;import org.elasticsearch.common.transport.InetSocketTransportAddress;import org.elasticsearch.index.get.GetField;import java.net.InetAddress;import java.net.UnknownHostException;import java.util.HashMap;import java.util.Map;import java.util.concurrent.ExecutionException;/** * Created by root on 2016/11/9. */public class test {    public static void main(String[] args) throws UnknownHostException, ExecutionException, InterruptedException {        Settings  settings = Settings.settingsBuilder()                .put("cluster.name","liuhaijing").build();        Client  client  = TransportClient.builder().settings(settings).build()                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("node01"),9300))                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("node02"),9300))                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("node03"),9300));        // 增加        Map
map = new HashMap
(); map.put("name","liuhaijing2"); IndexResponse response = client.prepareIndex("bjsxt2", "emp", "1") .setSource(map).execute().actionGet();// 删除// DeleteResponse response3 = client.prepareDelete("bjsxt2", "emp", "1").execute().actionGet(); // 查找// GetResponse response2 = client.prepareGet("bjsxt2", "emp", "1").execute().actionGet();// Map
data = response2.getSource();// String name = (String) data.get("name");// System.out.printf(name );// 总数count long count = client.prepareCount("bjsxt2" ).execute().get().getCount(); System.out.printf(String.valueOf(count)); client.close(); }}

 

 

 

 

 

 

转载于:https://my.oschina.net/captainliu/blog/784704

你可能感兴趣的文章
Python~第一天
查看>>
Linux管理用户账号
查看>>
redis中使用lua脚本
查看>>
颜色数组
查看>>
ELASTICSEARCH清理过期数据
查看>>
oo第三次博客作业
查看>>
人工智能简介
查看>>
PAT (Advanced Level) 1075. PAT Judge (25)
查看>>
08. Web大前端时代之:HTML5+CSS3入门系列~H5 Web存储
查看>>
MongoDB复制
查看>>
jdk1.8-LinkedList源码分析
查看>>
【转】Linux世界驰骋——文件系统和设备管理
查看>>
Arcgis 抽稀矢量数据
查看>>
BZOJ 3524主席树裸题 (雾)
查看>>
IO多路复用
查看>>
爬取抽屉热搜榜文章
查看>>
MySQL 之【视图】【触发器】【存储过程】【函数】【事物】【数据库锁】【数据库备份】...
查看>>
杭电ACM--2008数值统计
查看>>
面向对象复习
查看>>
hibernate 异常
查看>>