ES(elasticsearch)搜索引擎安装和使用_es搜索引擎

默认情况下,Elasticsearch中的每个索引被分片5个主分片和1个复制,这意味着,如果你的集群中至少有两个节点,你的索引将会有5个主分片和另外5个复制分片(1个完全拷贝),这样的话每个索引总共就有10个分片。一个索引的多个分片可以存放在集群中的一台主机上,也可以存放在多台主机上,这取决于你的集群机器数量。主分片和复制分片的具体位置是由ES内在的策略所决定的。

以上部分内容转自Elasticsearch基础教程,并对其进行了补充。

elasticSearch安装

从github下载1.7版tag并编译(选择1.7版是因为当前我们的网站的symfony2版本还不支持2.x版本,但请放心的用,1.7版是经过无数人验证过的最稳定版本)

wget https://codeload.github.com/elastic/elasticsearch/tar.gz/v1.7.5

解压后进入目录执行

mvn package -DskipTests

这会花费你很长一段时间,你可以去喝喝茶了

编译完成后会在target/releases中生成编译好的压缩包(类似于elasticsearch-1.7.5.zip这样的文件),把这个压缩包解压放到任意目录就安装好了

安装ik插件

ik是一个中文切词插件,elasticSearch自带的中文切词很不专业,ik对中文切词支持的比较好。

https://github.com/medcl/elasticsearch-analysis-ik上找到我们elasticSearch对应的版本,1.7.5对应的ik版本是1.4.1,所以下载https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v1.4.1

解压出的目录是:

elasticsearch-analysis-ik-1.4.1

进入目录后执行

mvn clean package

编译完后依然是在target/releases生成了类似于elasticsearch-analysis-ik-*.zip的压缩包,把里面的内容解压到elasticsearch安装目录的plugins/ik下

再把elasticsearch-analysis-ik-1.4.1/config/ik目录整体拷贝到elasticsearch安装目录的config下

修改elasticsearch安装目录下的config/elasticsearch.yml,添加:

index:
  analysis:
    analyzer:
      ik:
        alias: [ik\_analyzer]
        type: org.elasticsearch.index.analysis.IkAnalyzerProvider
      ik_max_word:
        type: ik
        use_smart: false
      ik_smart:
        type: ik
        use_smart: true

这样ik就安装好了

启动并试用

直接进入elasticsearch安装目录,执行

./bin/elasticsearch -d

后台启动完成

elasticSearch是通过HTTP协议收发数据的,所以我们用curl命令来给它发命令,elasticSearch默认监听9200端口

写入一篇文章:

curl -XPUT 'http://localhost:9200/myappname/myblog/1?pretty' -d '
{
  "title": "我的标题",
  "content": "我的内容"
}'

会收到返回信息:

{
  "\_index" : "myappname",
  "\_type" : "myblog",
  "\_id" : "1",
  "\_version" : 1,
  "created" : true
}

这说明我们成功把一篇文章发给了elasticSearch,它底层会利用lucene自动帮我们建好搜索用的索引

再写一篇文章:

curl -XPUT 'http://localhost:9200/myappname/myblog/2?pretty' -d '
{
  "title": "这是第二篇标题",
  "content": "这是第二篇内容"
}'

会收到返回信息:

{
  "\_index" : "myappname",
  "\_type" : "myblog",
  "\_id" : "2",
  "\_version" : 1,
  "created" : true
}

请尊重原创,转载请注明来源网站www.shareditor.com以及原始链接地址

这时我们找到elasticsearch安装目录的data目录下会生成这样的目录和文件:

ls data/nodes/0/indices/myappname/
0  1  2  3  4  _state

不同环境会稍有不同,但是都会生成myappname目录就对了

查看所有文章:

curl -XGET 'http://localhost:9200/myappname/myblog/_search?pretty=true' -d '
{
    "query" : {
 "match\_all" : {}
 }
}'

这时会把我们刚才添加的两篇文章都列出来

搜索关键词“我的”:

curl -XGET 'http://localhost:9200/myappname/myblog/_search?pretty=true' -d '
{
    "query":{
 "query\_string":{"query":"我的"}
 }
}'

会返回:

{
  "took" : 2,
  "timed\_out" : false,
  "\_shards" : {
 "total" : 5,
 "successful" : 5,
 "failed" : 0
 },
  "hits" : {
 "total" : 1,
 "max\_score" : 0.191783,
 "hits" : [ {
 "\_index" : "myappname",
 "\_type" : "myblog",
 "\_id" : "1",
 "\_score" : 0.191783,
 "\_source":
{
 "title": "我的标题",
 "content": "我的内容"
}
 } ]
 }
}

搜索关键词“第二篇”:

curl -XGET 'http://localhost:9200/myappname/myblog/_search?pretty=true' -d '
{
    "query":{
 "query\_string":{"query":"第二篇"}
 }
}'

会返回:

{
  "took" : 2,
  "timed\_out" : false,
  "\_shards" : {
 "total" : 5,
 "successful" : 5,
 "failed" : 0
 },
  "hits" : {
 "total" : 1,
 "max\_score" : 0.1879082,
 "hits" : [ {
 "\_index" : "myappname",
 "\_type" : "myblog",
 "\_id" : "2",
 "\_score" : 0.1879082,
 "\_source":
{
 "title": "这是第二篇标题",
 "content": "这是第二篇内容"
}
 } ]
 }
}

如果想检查ik的切词效果,可以执行:

curl 'http://localhost:9200/myappname/_analyze?analyzer=ik_max_word&pretty=true' -d'
{
    "text":"中华人民共和国国歌"
}'

通过返回结果可以看出,ik_max_word切词把中华人民共和国国歌切成了“中华人民共和国”、“中华人民”、“中华”、“华人”、“人民共和国”、“人民”、“共和国”、“共和”、“国”、“国歌”

也就是说我们搜索这些词中的任意一个都能把这句话搜到,如果不安装ik插件的话,那只会切成:“中”、“华”、“人”、“民”、“共”、“和”、“国”、“国”、“歌”,不够智能,搜索也不好进行了

讲解一下

上面几条命令都是json形式,elasticSearch就是这么人性化,没治了。

这里面的myappname是你自己可以改成自己应用的名字,这在elasticSearch数据存储中是完全隔离的,而myblog是我们在同一个app中想要维护的不同的数据,就是你的不同数据,比如文章、用户、评论,他们最好都分开,这样搜索的时候也不会混

pretty参数就是让返回的json有换行和缩进,容易阅读,调试时可以加上,开发到程序里就可以去掉了

analyzer就是切词器,我们指定的ik_max_word在前面配置文件里遇到过,表示最大程度切词,各种切,360度切

返回结果里的hits就是“命中”,total是命中了几条,took是花了几毫秒,_score就是相关性程度,可以用来做排序的依据

elasticSearch有什么用

上面都是json的接口,那么我们怎么用呢?其实你想怎么用就怎么用,煎着吃、炒着吃、炖着吃都行。比如我们的博客网站,当你创建一篇博客的时候可以发送“添加”的json命令,然后你开发一个搜索页面,当你输入关键词点搜索的时候,可以发送查询的命令,这样返回的结果就是你的搜索结果,只不过需要你自己润色一下,让展现更美观。感觉复杂吗?下一节告诉你怎么用symfony2的扩展来实现博客网站的搜索功能

————————————————————————————————————————————————————

linux下elasticsearch 安装、配置及示例

简介 
开始学es,我习惯边学边记,总结出现的问题和解决方法。本文是在两台Linux虚拟机下,安装了三个节点。本次搭建es同时实践了两种模式——单机模式和分布式模式。条件允许的话,可以在多台机器上配置es节点,如果你机器性能有限,那么可以在一台虚拟机上完成多节点的配置。 
如图,是本次3个节点的分布。

虚拟机主机名IPes节点
master192.168.137.100node1、node3
slave192.168.137.101node2

一、下载及配置

1.几个基本名词

index: es里的index相当于一个数据库。 
type: 相当于数据库里的一个表。 
id: 唯一,相当于主键。 
node:节点是es实例,一台机器可以运行多个实例,但是同一台机器上的实例在配置文件中要确保http和tcp端口不同(下面有讲)。 
cluster:代表一个集群,集群中有多个节点,其中有一个会被选为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。 
shards:代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上,构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。 
replicas:代表索引副本,es可以设置多个索引的副本,副本的作用一是提高系统的容错性,当个某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高es的查询效率,es会自动对搜索请求进行负载均衡。

2.下载
名称版本下载地址
elasticsearch1.7.3elasticsearch-1.7.3.tar.gz

下载后,放到你的目录下并解压. 因为我们要配置包含三个节点的集群,可以先将其重命名为elasticsearch-node1。比如我的是 /home/zkpk/elasticsearch-node1。

3.修改配置文件

(1) 初步修改 
打开/home/zkpk/elasticsearch-node1/config目录下的elasticsearch.yml 文件 ,修改以下属性值并取消该行的注释:

cluster.name:  elasticsearch
#这是集群名字,我们 起名为 elasticsearch。es启动后会将具有相同集群名字的节点放到一个集群下。

node.name: "es-node1"
#节点名字。

covery.zen.minimum_master_nodes: 2
#指定集群中的节点中有几个有master资格的节点。对于大集群可以写3个以上。

discovery.zen.ping.timeout: 40s

#默认是3s,这是设置集群中自动发现其它节点时ping连接超时时间,为避免因为网络差而导致启动报错,我设成了40s。

discovery.zen.ping.multicast.enabled: false
#设置是否打开多播发现节点,默认是true。

network.bind_host: 192.168.137.100
#设置绑定的ip地址,这是我的master虚拟机的IP。

network.publish_host: 192.168.137.100
#设置其它节点和该节点交互的ip地址。

network.host: 192.168.137.100
#同时设置bind\_host和publish\_host上面两个参数。

discovery.zen.ping.unicast.hosts: ["192.168.137.100",  "192.168.137.101","192.168.137.100:9301"]
#discovery.zen.ping.unicast.hosts:["节点1的 ip","节点2 的ip","节点3的ip"]
指明集群中其它可能为master的节点ip,以防es启动后发现不了集群中的其他节点。第一对引号里是node1,默认端口是9300。第二个是 node2 ,在另外一台机器上。第三个引号里是node3,因为它和node1在一台机器上,所以指定了9301端口。
 
 
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

  • 18

  • 19

  • 20

  • 21

  • 22

  • 23

  • 24

  • 25

  • 26

  • 27

  • 28

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

  • 18

  • 19

  • 20

  • 21

  • 22

  • 23

  • 24

  • 25

  • 26

  • 27

  • 28

(2) 进一步修改 
拷贝 elasticsearch-node1 整个文件夹,两份,一份elasticsearch-node2,一份elasticsearch-node3. 
将elasticsearch-node2 文件夹copy到另外一台IP为192.168.137.101的机器上。而在 192.168.137.100 机器上有 node1和node3.

对于node3: node3和node1在一台机器上,node1的配置文件里端口默认分别是9300和9200,所以要改一下node3配置文件里的端口,elasticsearch.yml 文件修改如下:

node.name: "es-node3"
transport.tcp.port: 9301
http.port: 9201
 
 
  • 1

  • 2

  • 3

  • 1

  • 2

  • 3

对于node2: 对 elasticsearch.yml 修改如下

node.name: "es-node2"
network.bind\_host: 192.168.137.101
network.publish\_host: 192.168.137.101
network.host: 192.168.137.101
 
 
  • 1

  • 2

  • 3

  • 4

  • 1

  • 2

  • 3

  • 4

注意: 
1.对于单机多节点的es集群,一定要注意修改 transport.tcp.port 和http.port 的默认值保证节点间不冲突。 
2. 出现找不到同一集群中的其他节点的情况,检查下 discovery.zen.ping.unicast.hosts 是否已设置。

二、运行 & 关闭 elasticsearch

1.运行elasticsearch :

编辑 /home/zkpk/elasticsearch-1.7.3/bin/elasticsearch.in.sh, 设置 ES_MIN_MEM和ES_MAX_MEM,确保二者数值一致,或者可以在启动es时指定,

[zkpk@master ~]$ cd ~/elasticsearch-node1/bin
[zkpk@master bin]$ ./elasticsearch -Xms512m -Xmx512m
 
 
  • 1

  • 2

  • 1

  • 2

若想让es后台运行,则

[zkpk@master bin]$ ./elasticsearch -d -Xms512m -Xmx512m
 
 
  • 1

  • 1

2.关闭elasticsearch:

前台运行:可以通过”CTRL+C”组合键来停止运行 
后台运行,可以通过”kill -9 进程号”停止.也可以通过REST API接口:

curl -XPOST http://主机IP:9200/\_cluster/nodes/\_shutdown
 
 
  • 1

  • 1

来关闭整个集群,通过:

curl -XPOST http://主机IP:9200/\_cluster/nodes/节点标示符(如es-node1)/\_shutdown
 
 
  • 1

  • 1

来关闭单个节点.

三、插件及其安装

BigDesk Plugin : 对集群中es状态进行监控。 
Elasticsearch Head Plugin: 对ES进行各种操作,如查询、删除、浏览索引等。

1.安装head插件

进入到节点elasticsearch-node1/bin路径,并安装插件。

[zkpk@master bin]$ ./plugin -install mobz/elasticsearch-head
 
 
  • 1

  • 1

2. 安装bigdesk

[zkpk@master bin]$ ./plugin -install lukas-vlcek/bigdesk

让我们看下es页面吧~~

打开head浏览,浏览器输入http://192.168.137.100:9200/_plugin/head/ ,如图,

开始每个节点下是空白的,没有这些索引分片

每个小方块就是索引分片,可以看到每个索引被分成几个分片,每个分片还有它的备份分片,然后存储在三个节点上。粗框的是主分片,细框的是备份分片。

四、添加索引

现在我们来添加一个索引记录吧~

1.可以在命令窗口通过命令来添加
curl -XPUT 'http://主机IP:9200/dept/employee/32' -d '{ "empname": "emp32"}'
 
 
  • 1

  • 1

见 http://www.oschina.net/translate/elasticsearch-getting-started?cmp

2.我们可以在页面上通过JSON添加

(1)点击 复合查询[+] ,我们可以在 megacorp 索引 (相当于数据库名)的 employee 类型(相当于表名)下新增一个id为2的人的信息。

这里写图片描述

点击下方的 提交请求 按钮,页面右方有回馈信息,“created”代表是否为新建。添加成功。

这里写图片描述

点击 浏览数据 ,在左侧 索引 下选择 megacorp,如图,

这里写图片描述

可以看到,一条id为2的记录被添加了。

(2)下面我们修改id为2 的人的年龄为15,把about 信息去掉,并且加一项兴趣。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值