ElasticSearch 研究学习文档.docx

上传人:b****9 文档编号:26069715 上传时间:2023-06-17 格式:DOCX 页数:48 大小:975.59KB
下载 相关 举报
ElasticSearch 研究学习文档.docx_第1页
第1页 / 共48页
ElasticSearch 研究学习文档.docx_第2页
第2页 / 共48页
ElasticSearch 研究学习文档.docx_第3页
第3页 / 共48页
ElasticSearch 研究学习文档.docx_第4页
第4页 / 共48页
ElasticSearch 研究学习文档.docx_第5页
第5页 / 共48页
点击查看更多>>
下载资源
资源描述

ElasticSearch 研究学习文档.docx

《ElasticSearch 研究学习文档.docx》由会员分享,可在线阅读,更多相关《ElasticSearch 研究学习文档.docx(48页珍藏版)》请在冰豆网上搜索。

ElasticSearch 研究学习文档.docx

ElasticSearch研究学习文档

ElasticSearch学习文档

理论

 ElasticSearch是开源搜索平台领域的一个新成员。

ElasticSearch(简称ES)是一个基于Lucene构建的开源,分布式,RESTful搜索引擎。

设计用于云计算中,能够达到搜索实时、稳定、可靠和快速,并且安装使用方便。

支持通过HTTP请求,使用JSON进行数据索引。

 

cluster 

  代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。

es的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看es集群,在逻辑上是个整体,你与任何一个节点的通信和与整个es集群通信是等价的。

 

shards 

   代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。

构成分布式搜索。

分片的数量只能在索引创建前指定,并且索引创建后不能更改。

  

replicas  

代表索引副本,es可以设置多个索引的副本,副本的作用一是提高系统的容错性,当个某个节点某个分片损坏或丢失时可以从副本中恢复。

二是提高es的查询效率,es会自动对搜索请求进行负载均衡。

 

 recovery 

 

  代表数据恢复或叫数据重新分布,es在有节点加入或退出时会根据机器的负载对索引分片进行重新分配,挂掉的节点重新启动时也会进行数据恢复。

 

 river

代表es的一个数据源,也是其它存储方式(如:

数据库)同步数据到es的一个方法。

它是以插件方式存在的一个es服务,通过读取river中的数据并把它索引到es中,官方的river有couchDB的,RabbitMQ的,Twitter的,Wikipedia的。

 

 gateway 

代表es索引快照的存储方式,es默认是先把索引存放到内存中,当内存满了时再持久化到本地硬盘。

gateway对索引快照进行存储,当这个es集群关闭再重新启动时就会从gateway中读取索引备份数据。

es支持多种类型的gateway,有本地文件系统(默认),分布式文件系统,Hadoop的HDFS和amazon的s3云存储服务。

 

 discovery.zen 

代表es的自动发现节点机制,es是一个基于p2p的系统,它先通过广播寻找存在的节点,再通过多播协议来进行节点之间的通信,同时也支持点对点的交互。

 

Transport 

  代表es内部节点或集群与客户端的交互方式,默认内部是使用tcp协议进行交互,同时它支持http协议(json格式)、thrift、servlet、memcached、zeroMQ等的传输协议(通过插件方式集成)。

 

服务器搭建 

先到http:

//www.elasticsearch.org/download/下载最新版的elasticsearch运行包,本文写时最新的是1.4.4,作者是个很勤快的人,es的更新很频繁,bug修复得很快。

下载完解开有三个包:

bin是运行的脚本,config是设置文件,lib是放依赖的包。

如果你要装插件的话就要多新建一个plugins的文件夹,把插件放到这个文件夹中。

集群方案

单机版的elasticsearch运行很简单,linux下直接 bin/elasticsearch就运行了。

window运行bin/elasticsearch.bat。

如果是在局域网中运行elasticsearch集群也是很简单的,只要cluster.name设置一致,并且机器在同一网段下,启动的es会自动发现对方,组成集群。

配置信息

在service目录下有个elasticsearch.conf配置文件,主要是设置一些java运行环境参数,其中比较重要的是下面的

参数:

#es的home路径,不用用默认值就可以

set.default.ES_HOME=

#分配给es的最小内存

set.default.ES_MIN_MEM=256

#分配给es的最大内存

set.default.ES_MAX_MEM=1024

#启动等待超时时间(以秒为单位)

wrapper.startup.timeout=300

#关闭等待超时时间(以秒为单位)

wrapper.shutdown.timeout=300

#ping超时时间(以秒为单位)

wrapper.ping.timeout=300

插件安装

在/bin/目录下有个plugin是安装插件用的

plugin -install medcl/elasticsearch-analysis-ik/1.1.0 

或者手动通过下载包安装,在github上有个最新的 

 

(直接用plugin --install //方式安装,这个真看人品,反正我是没装上。

) 

下载后用plugin --url file:

//path/to/plugin --install plugin-name方式安装,没问题,安装成功。

 

下载ik相关配置词典文件到config目录 

cd config 

wget  --no-check-certificate unzip ik.zip rm ik.zip 安装mmseg插件:

 

bin/plugin -install medcl/elasticsearch-analysis-mmseg/1.1.0   下载相关配置词典文件到config目录 

cd config   

wget  --no-check-certificate   unzip mmseg.zip   rm mmseg.zip   分词配置 

ik分词配置,在elasticsearch.yml文件中加上 

    index:

 

      analysis:

          analyzer:

           ik:

 

              alias:

 [ik_analyzer] 

              type:

 org.elasticsearch.index.analysis.IkAnalyzerProvider 或 

    index.analysis.analyzer.ik.type :

 “ik”   这两句的意义相同 

mmseg分词配置,也是在在elasticsearch.yml文件中

请看《PAI文档》

D:

\services\elasticsearch-1.4.4\bin>plugin.bat-installmobz/elasticsearch-head

http:

//127.0.0.1:

9200/_plugin/head/

集群

当内网再启动一个ES时,集群会自动加入。

最好做如下改动:

将node.name的值设置为test-node2,总之必须和之前配置值不同

两台es服务同时起来,因为配置文件中均默认cluster.name=elasticsearch,所以这两台机器自动构建成一个集群,集群名字为elasticsearch。

上图:

表示该集群目前处于健康状态,集群包含2台机器,索引总共20个分片。

粗线绿框表示主分片,细线绿框为备份分片。

机器IP:

192.168.88.130是window7

10.20.26.52是centos6

window安装目录

bin是运行的脚本,config是设置文件,lib是放依赖的包。

logs用于日志记录,可以自己创建plugins目录中用于放置自己的插件

这时,在26.52上添加一条数据在window7下

发现laich已同步过来了

集群扩展

比如一个节点可以:

mvelasticsearch-1.4.1elasticsearch-node1

#cdelasticsearch-node1/config/

[root@localhostconfig]#ls

elasticsearch.ymllogging.yml

#elasticsearch-node1配置

#配置集群名称

cluster.name:

elasticsearch-cluster-centos

#配置节点名称

node.name:

"es-node1"

#为节点之间的通信设置一个自定义端口(默认为9300)

transport.tcp.port:

9300

#设置监听HTTP传输的自定义端(默认为9200)

http.port:

9200

复制一份配置好的节点为elasticsearch-node2

[root@localhostelasticsearch-cluster]#ls

elasticsearch-node1elasticsearch-node2

.修改节点2中的集群配置信息

#elasticsearch-node2配置

#配置集群名称

cluster.name:

elasticsearch-cluster-centos

#配置节点名称

node.name:

"es-node2"

#为节点之间的通信设置一个自定义端口(默认为9300)

transport.tcp.port:

9301

#设置监听HTTP传输的自定义端(默认为9200)

http.port:

9201

上面配置表示集群中有2个节点,节点名为别为,"es-node1"和 "es-node2",同属于集群"elasticsearch-cluster-centos"

[root@localhostbin]#./elasticsearch-d-Xms512m-Xmx512m

elasticsearchservicewrapper安装

      这个是对elasticsearch执行命令的包装服务,安装之后,方便elasticsearch的启动,停止等等操作。

     

(1)下载elasticsearchservicewrapper

               gitclone 

     

(2)简单配置jvm的内存

               修改ES_HOME/bin/service/elasticsearch.conf,set.default.ES_HEAP_SIZE=1024,该值根据机器的配置可自定义。

     (3)安装启动服务

               执行命令:

ES_HOME/bin/service/elasticsearchinstall

     (4)启动/停止/重启服务

              执行命令:

ES_HOME/bin/service/elasticsearchstart/stop/restart

bigdesk

        bigdesk是集群监控插件,通过该插件可以查看整个集群的资源消耗情况,cpu、内存、http链接等等。

        执行命令安装:

sudoelasticsearch/bin/plugin-installlukas-vlcek/bigdesk     

      安装完成之后,在浏览器输入:

http:

//ip:

9200/_plugin/bigdesk/#nodes ,显示界面如下:

        点击test-node1节点,可以查看单个节点的资源使用情况,包括JVM、ThreadPools、OS、Process、HTTP&Transport、Indice、Filesystem。

        ES的插件非常之多,请参考ES插件大全。

httpApi小测试

1.加入数据

[root@zk03bin]#curl-XPUT'http:

//zk03:

9200/laich/employee/1'-d'

>{

>"first_name":

"John",

>"last_name":

"Smith",

>"age":

25,

>"about":

"Ilovetogorockclimbing",

>"interests":

["sport","music"]

>}'

2.检索

curl-XGET'http:

//zk03:

9200/laich/employee/1'

3.条件搜索

curl-XGET'http:

//zk03:

9200/laich/employee/_search?

q=last_name:

Smith'

4.搜索全部员工

curl-XGET'http:

//zk03:

9200/laich/employee/_search'

5.使用QueryDSL搜索

curl-XGET'http:

//zk03:

9200/laich/employee/_search'-d'

{

"query" :

 {

"match" :

 {"last_name" :

 "Smith"}

}

}'

6.多条件DSL复杂的搜索

curl-XGET'http:

//zk03:

9200/laich/employee/_search'-d'

{

"query":

{

    "filtered":

{

      "filter":

{

        "range":

{

          "age":

{"gt":

30} 

        }

      },

"query" :

 {

"match" :

 {"last_name" :

 "Smith"}

}

}'

#名字搜索、通过年龄过滤年龄大于30

全文搜索

在原来数据上加一数据:

7.加入数据

[root@zk03bin]#curl-XPUT'http:

//zk03:

9200/laich/employee/2'-d'

{

"first_name":

"Jane",

"last_name":

"Smith",

"age":

30,

"about":

"Iliketocollectrock  albums",

"interests":

["game","music"]

}'

curl-XGET'http:

//zk03:

9200/laich/employee/_search?

pretty' -d ' 

{

"query" :

 {

"match" :

 {"about" :

 "rock climbing"}

}

}'

这时会将上两条信息输出来。

这是传统数据库查询很难做到的。

这个是分单词查询。

段落搜索

匹配精确的短语或者段落

match查询变为match_phrase查询

curl-XGET'http:

//zk03:

9200/laich/employee/_search' -d ' 

{

"query" :

 {

"match_phrase" :

 {"about" :

 "rock climbing"}

}

}'

这时找到的只有一条记录

高亮搜索

回到之前的查询,但是添加一个highlight参数:

curl-XGET'http:

//zk03:

9200/laich/employee/_search' -d ' 

{

"query" :

 {

"match_phrase" :

 {"about" :

 "rock climbing"}

},

"highlight" :

 {

"fields" :

 {"about" :

 {}}

}

}'

运行这个查询后,相同的命中结果会被返回,但是我们会得到一个新的名叫highlight的部分。

在这里包含了about字段中的匹配单词,并且会被HTML字符包裹住。

利用head操作

利用head查看到laich这个数据

可以直接查看数据,像查看表一样。

可通过界面操作进行查询操作

更新数据

将歌手名由“杨坤”改成“杨坤独唱”;

结果中的version字段已经成了2,因为我们这是是修改,索引版本递增;created字段是false,表示这次不是新建而是更新。

更新接口与创建接口完全一样,ES会查询记录是否存在,如果不存在就是创建,存在就是更新操作。

索引文档删除操作

url:

http:

//127.0.0.1:

9200/song001/list001/1

HTTP方法采用DELETE的形式。

删除过后,再通过查询接口去查询将得不到结果。

总结:

增删改查的RESTful接口URL形式:

http:

//localhost:

9200///[]

增删改查分别对应:

HTTP请求的PUT、GET、DELETE方法。

PUT调用是如果不存在就是创建,已存在是更新。

数据备份与导入

reiver-jdbc导入数据

Elastisearch中提供了river模块来从其他数据源中获取数据,该项功能以插件的形式存在,目前已有的river插件包括:

  riverpluginsedit

  1.SupportedbyElasticsearch

  CouchDBRiverPlugin

  RabbitMQRiverPlugin

  TwitterRiverPlugin

  WikipediaRiverPlugin

  2.Supportedbythecommunity

  ActiveMQRiverPlugin(byDominikDorn)

  AmazonSQSRiverPlugin(byAlexBogdanovski)

  CSVRiverPlugin(byMartinBednar)

  DropboxRiverPlugin(byDavidPilato)

  FileSystemRiverPlugin(byDavidPilato)

  GitRiverPlugin(byOlivierBazoud)

  GitHubRiverPlugin(byuberVU)

  HazelcastRiverPlugin(bySteveSamuel)

  JDBCRiverPlugin(byJ?

rgPrante)

  JMSRiverPlugin(bySteveSarandos)

  KafkaRiverPlugin(byEndgameInc.)

  LDAPRiverPlugin(byTanguyLeroux)

  MongoDBRiverPlugin(byRichardLouapre)

  Neo4jRiverPlugin(bySteveSamuel)

  OpenArchivesInitiative(OAI)RiverPlugin(byJ?

rgPrante)

  RedisRiverPlugin(bySteveSamuel)

  RSSRiverPlugin(byDavidPilato)

  SofaRiverPlugin(byadamlofts)

  SolrRiverPlugin(byLucaCavanna)

  St9RiverPlugin(bySunnyGleason)

  SubversionRiverPlugin(byPascalLombard)

  DynamoDBRiverPlugin(byKevinWang)

可以看出,已经覆盖了大部分的数据源,特别是针对关系型数据库提供了统一的jdbc-river来进行数据操作。

 

下面以Mysql-River plugins为例:

 

1、安装Mysql-River插件 

2、bin/plugin-install/path/to/plugin/river-mysql.zip 

3、   当安装好Mysql-Riverplugin后,一般可以马上使用,但建立重新加载Es集群。

查看log中是否正确的加载了Mysql-RiverPlugin(在后面我们讲到如何开发相关Plugin)。

 

4、   配置Es索引与Mysql数据之间的对应关系。

 

建立索引(相关Mapping信息如下:

) 

curl-XPUT127.0.0.1:

9200/elasticsearchindexname/elasticsearchtypename/_mapping-d 

"elasticsearchtypename":

                  "_timestamp":

                            "enabled":

true 

                  } 

                  将River索引的配置也提交到Es集群中:

 

curl-XPUT127.0.0.1:

9200/_river/river-mysql/_meta–d 

  { 

            "type":

"mysql", 

              "mysql":

        "index":

"elasticsearchindexname",(索引名称) 

        "type":

"elasticsearchtypename",(类型)  

       "hostname":

"127.0.0.1:

3306",(服务器) 

        "database":

"ESDATA",(数据库名称) 

       "username":

"root",(用户名) 

        "password":

"",(密码)  

       "uniqueIdField":

"_ID",(标识) 

       "query":

"selectRID,PNA

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1