Elasticsearch安装部署

Elasticsearch安装部署
Elasticsearch安装部署

一、Linux下安装elasticsearch

1:下载elasticsearch,

(download:https://www.360docs.net/doc/ec4107713.html,/download/2012/01/10/0.18.7.html)

如在/softs/elasticsearch-0.18.7.tar.gz.

2:解压:

tar -zxvfelasticsearch-0.18.7.tar.gz (解压)

mvelasticsearch-0.18.7 /usr/local/elasticsearch-0.18.7 (把es移到/usr/local 目录下)

3:修改配置:

修改集群名称(可选):

vi/usr/local/elasticsearch-0.18.7/config/elasticsearch.yml ,找到: https://www.360docs.net/doc/ec4107713.html,,去掉前面的#,修改为https://www.360docs.net/doc/ec4107713.html,:youboy (名字随意)。

修改结点名(可选):

同上,找到https://www.360docs.net/doc/ec4107713.html,,去掉前面的#,修改为https://www.360docs.net/doc/ec4107713.html,:yb1

修改分片数(可选):

同上,找到index.number_of_shards,去掉前面的#,修改为

index.number_of_shards:10(默认为5)

修改备份数(可选):

同上,找到index.number_of_replicas,去掉前面的#,修改为

index.number_of_replicas 1(默认也是1,可不理)。

修改Es占用内存:

vi /usr/local/elasticsearch-0.18.7/bin/elasticsearch.in.sh,找

到 ES_MIN_MEM和ES_MAX_MEM,修改es最大和最小占用内存值。

(说明:Es的集群非常简单,只要在同一个局域网内,多台服务器能互相通讯,并且https://www.360docs.net/doc/ec4107713.html,是一样的,就能自动集在一起。)

4:运行Es:

cd/usr/local/elasticsearch-0.18.7/bin

./elasticsearch

安装成功!

可以执行以下命令来关掉整个集群:

curl -XPOST http://localhost:9200/_cluster/nodes/_shutdown

为关闭单一节点,假如节点标识符是BlrmMvBdSKiCeYGsiHijdg,可以执行下面的命令:curl –XPOST

http://localhost:9200/_cluster/nodes/BlrmMvBdSKiCeYGsiHijdg/_shutdown

节点的标识符可以在日志中看到,或者使用_cluster/nodes?API,命令如下:

curl -XGET http://localhost:9200/_cluster/nodes/

二、Window下安装elasticsearch

首先下载最新的elasticsearch安装版本:

elasticsearch下载。

下载最新的elasticsearch 0.90.1版本。下载完成后。解压缩在安装目录。

在cmd命令行进入安装目录,再进入bin目录,运行elasticsearch.bat命令:

启动成功后。在浏览器中输入:http://localhost:9200/

1 2 3 4 5 6 {

"ok":true,

"status":200, "name":"Cletus Kasady", "version":{ "number":"0.90.1",

7 8 9 10

"snapshot_build":false

},

"tagline":"You Know, for Search"

} 表示安装成功了。

elasticsearch 插件elasticsearch-head 安装:

在cmd 命令行中进入安装目录,再进入 bin 目录,运行以下命令:

1 plugin -install mobz /elasticsearch -head

然后安装成功后,在浏览器中输入:http://localhost:9200/_plugin/head/,可以看到效果。 具体安装步骤也可以参考:https://https://www.360docs.net/doc/ec4107713.html,/mobz/elasticsearch-head

如果不用安装命令,也可以直接下载安装。

https://https://www.360docs.net/doc/ec4107713.html,/mobz/elasticsearch-head

下载安装包。

1.在cmd 命令行中进入安装目录,看是否有plugins 目录,如果没有,则创建(第一次时,没有,需要创建)。

2.进入plugins 目录,创建head 目录

3.进入head 目录,创建_site 目录

4.解压下载的elasticsearch-head-master.zip,将其elasticsearch-head-master 目录下的所有文件放入_site 目录中。

5.再次重新启动elasticsearch 。在浏览器中输入:http://localhost:9200/_plugin/head/查看结果。

elasticsearch 插件bigdesk 安装:

在cmd 命令行中进入安装目录,再进入 bin 目录,运行以下命令:

1 plugin -install lukas -vlcek /bigdesk

然后安装成功后,在浏览器中输入:http://localhost:9200/_plugin/bigdesk/,可以看到效果。

具体安装步骤也可以参考:https://https://www.360docs.net/doc/ec4107713.html,/lukas-vlcek/bigdesk

如果不用安装命令,也可以直接下载安装。

https://https://www.360docs.net/doc/ec4107713.html,/lukas-vlcek/bigdesk

下载安装包。

1.在cmd 命令行中进入安装目录,看是否有plugins 目录,如果没有,则创建(第一次时,没有,需要创建)。

2.进入plugins 目录,创建bigdesk 目录

3.进入bigdesk 目录,创建_site 目录

4.解压下载的bigdesk-master.zip,将其bigdesk-master 目录下的所有文件放入_site 目录中。

5.再次重新启动elasticsearch 。在浏览器中输入:http://localhost:9200/_plugin/bigdesk/查看结果。

二、插件安装

一)插件——head

进入路径:/elasticsearch-1.7.1/bin

执行下面安装命令:

$ ./plugin -install mobz/elasticsearch-head

成功后:

进入http://localhost:9200/_plugin/head/如下图

二)插件——bigdesk

进入路径:/elasticsearch-1.7.1/bin

执行下面安装命令:

$ ./plugin -install lukas-vlcek/bigdesk

成功后:

进入http://localhost:9200/_plugin/bigdesk/如下图1)nodes

2)clustor

三、第三方插件

Elasticsearch扩展性非常好,有很多官方和第三方开发的插件,下面以分词、同步、数据传输、脚本支持、站点、其它这几个类别进行划分。

分词插件

Combo Analysis Plugin (作者 Olivier Favre, Yakaz)

简介:组合分词器,可以把多个分词器的结果组合在一起。

Smart Chinese Analysis Plugin (作者 elasticsearch 团队)

简介:lucene默认的中文分词器

ICU Analysis plugin (作者 elasticsearch 团队)

简介:lucene自带的ICU分词,ICU是一套稳定、成熟、功能强大、轻便易用和跨平台支持

Unicode 的开发包。

Stempel (Polish) Analysis plugin (作者 elasticsearch 团队)

简介:法文分词器

IK Analysis Plugin (作者 Medcl)

简介:大名鼎鼎的ik分词,都懂的!

Mmseg Analysis Plugin (作者 Medcl)

简介:mmseg中文分词

Hunspell Analysis Plugin (作者 J?rgPrante)

简介:lucene自带的Hunspell模块

Japanese (Kuromoji) Analysis plugin (作者 elasticsearch 团队).

简介:日文分词器

Japanese Analysis plugin (作者 suguru).

简介:日文分词器

Russian and English Morphological Analysis Plugin (作者 Igor Motov)

简介:俄文英文分词器

Pinyin Analysis Plugin (作者 Medcl)

简介:拼音分词器

String2Integer Analysis Plugin (作者 Medcl)

简介:字符串转整型工具。主要用在facet这个功能上,如果facet的field的值是字符串的话,计算起来比较耗资源。可以把字符串映射成整型,对整型进行facet操作要比对字符串的快很多。

同步插件

CouchDB River Plugin (作者 elasticsearch 团队)

简介:CouchDB和elasticsearch的同步插件

Wikipedia River Plugin (作者 elasticsearch 团队)

简介:wikipedia文件读取插件。wikipedia是维基百科的一个离线库,不定期发布最新数据,是以xml形式发布的。这个river读取这个文件来建索引。

Twitter River Plugin (作者 elasticsearch 团队)

简介:twitter的同步插件,可以同步你twitter上的微博。

RabbitMQ River Plugin (作者 elasticsearch 团队)

简介:rabbitmq同步插件,读取rabbitmq上的队列信息并索引。

RSS River Plugin (作者 David Pilato)

简介:定期索引指定一个或多个RSS源的数据。

MongoDB River Plugin (作者 Richard Louapre)

简介:mongodb同步插件,mongodb必须搭成副本集的模式,因为这个插件的原理是通过定期读取mongodb中的oplog来同步数据。

Open Archives Initiative (OAI) River Plugin (作者 J?rgPrante)

简介:可以索引oai数据提供者提供的数据。

St9 River Plugin (作者 Sunny Gleason)

简介:可以索引索引st9数据(st9是神马?囧!!!)

Sofa River Plugin (作者 adamlofts)

简介:这个插件可以把多个CouchDB的数据库同步到同一个es索引中。

JDBC River Plugin (作者 J?rgPrante)

简介:关系型数据库的同步插件

FileSystem River Plugin (作者 David Pilato)

简介:本地文件系统文件同步插件,使用方法是指定一个本地目录路径,es会定期扫描索引该目录下的文件。

LDAP River Plugin (作者 T anguy Leroux)

简介:索引LDAP目录下的文件数据。

Dropbox River Plugin (作者 David Pilato)

简介:索引dropbox网盘上的文件。通过oauth协议来调用dropbox上的api建索引。ActiveMQ River Plugin (作者 Dominik Dorn)

简介:activemq队列的同步插件,和之前rabbitmq的类似

Solr River Plugin (作者 Luca Cavanna)

简介:solr同步插件,可以把solr里面的索引同步到es

CSV River Plugin (作者 Martin Bednar)

简介:通过指定目录地址来索引csv文件。

数据传输插件

Servlet transport (作者 elasticsearch 团队)

简介:Servlet rest插件,通过servlet来封装rest接口。

Memcached transport plugin (作者 elasticsearch 团队)

简介:本插件可以通过memcached协议进行rest接口的调用。注意:这里不是使用memcache 作为es的缓存。

Thrift Transport (作者 elasticsearch 团队)

简介:使用thrift进行数据传输。

ZeroMQ transport layer plugin (作者 T anguy Leroux)

简介:使用zeromq进rest接口的调用。

Jetty HTTP transport plugin (作者 Sonian Inc.)

简介:使用jetty来提供http rest接口。默认是使用netty。这个插件的好处是可以对http 接口进行一些权限的设置。

脚本插件

Python language Plugin (作者 elasticsearch 团队)

简介:python脚本支持

JavaScript language Plugin (作者 elasticsearch 团队)

简介:javascript脚本支持

Groovy lang Plugin (作者 elasticsearch 团队)

简介:groovy脚本支持

Clojure Language Plugin (作者 Kevin Downey)

简介:clojure脚本支持

站点插件(以网页形式展现)

BigDesk Plugin (作者Luká?Vl?ek)

简介:监控es状态的插件,推荐!

Elasticsearch Head Plugin (作者 Ben Birch)

简介:很方便对es进行各种操作的客户端。

Paramedic Plugin (作者KarelMina?ík)

简介:es监控插件

SegmentSpy Plugin (作者 Zachary Tong)

简介:查看es索引segment状态的插件

Inquisitor Plugin (作者 Zachary Tong)

简介:这个插件主要用来调试你的查询。

其它插件

Mapper Attachments Type plugin (作者 elasticsearch 团队)

简介:附件类型插件,通过tika库把各种类型的文件格式解析成字符串。

Hadoop Plugin (作者 elasticsearch team)

简介:hadoop和elasticsearch的集成插件,可以通过hadoop的mapreduce算法来并行建立索引,同时支持cascading,hive和pig等框架。

AWS Cloud Plugin (作者 elasticsearch 团队)

简介:elasticsearch与amazon web services的集成。

ElasticSearch Mock Solr Plugin (作者 Matt Weber)

简介:elasticsearch的solrapi接口。用了这个插件可以使用solr的api来调用es,直接用solrj就可以调用es。比较适用于从solr转es时暂时过度。

Suggester Plugin (作者 Alexander Reelsen)

简介:es搜索提示功能插件,不过es0.9版本后自带了这个功能,

ElasticSearch PartialUpdate Plugin (作者 Medcl)

简介:elasticsearch的部分更新插件。

ZooKeeper Discovery Plugin (作者 Sonian Inc.)

简介:通过zookeeper管理集群的插件。通过这个插件,es的分布式架构和solrcloud相似。ElasticSearch Changes Plugin (作者 Thomas Peuss)

简介:elasticsearch索引操作记录插件。通过这个插件可以查看用户对索引的增删改操作。ElasticSearch View Plugin (作者 Tanguy Leroux)

简介:这个插件可以把es的文档以html,xml或text的方式显示出来,它也可以通过查询生成web页面。

ElasticSearch New Relic Plugin (作者ViniciusCarvalho)

简介:elasticsearch和newrelic的集成插件。newrelica是一个性能监控工具。这个插件会把节点的状态数据传到newrelic的账号上。

四、配置IK分词

配置IK分词(服务器必须能连通网络)

1 cd /usr/local/elasticsearch-0.18.7/bin

./plugin -installmedcl/elasticsearch-analysis-ik/1.0.0

2 cdconfig

wgethttps://www.360docs.net/doc/ec4107713.html,/downloads/medcl/elasticsearch-analysis-ik/ik.zip--no-check-ce rtificate

unzip ik.zip

rm ik.zip

五、运用插入运行关闭es

1下载插件elasticsearch-servicewrapper.tar.gz

(download:https://www.360docs.net/doc/ec4107713.html,/doc/english/download.jsp)

2 解压:tar-zxvf elasticsearch-servicewrapper.tar.gz。

3 把解压得来的service目录拷贝到Es的bin目录下

Cdelasticsearch-servicewrapper

Mv service /usr/local/elasticsearch-0.18.7/bin

4启动es

Cd/usr/local/elasticsearch-0.18.7/bin/service

./elasticsearch start

./elasticsearch -d ------后台运行

------后台运行

5 停止es

Cd/usr/local/elasticsearch-0.18.7/bin/service

/elasticsearch stop

(说明:可参考https://https://www.360docs.net/doc/ec4107713.html,/elasticsearch/elasticsearch-servicewrapper)附:插件的主要命令

./elasticsearchconsole ------前台运行

./elasticsearch start ------后台运行

./elasticsearchinstall -------添加到系统自动启动

./elasticsearchremove -----取消随系统自动启动

(四)数据移植-----0.18.7到0.19.0RC3

1 先用curl工具对0.18.7进行flush

Curl localhost:9200/_flush

2 将0.18.7中的data目录拷贝到0.19.0RC3的相应目录下

3 修改0.19.0RC3的集群名,必须和0.18.7集群名一样。

六、命令行操作

ES最大的特点

1. 数据库的database, ES就是index

2. 数据库的table, ES就是tag

3. 不要使用browser,使用curl来进行客户端操作. 否则会出现java heap ooxx...

curl: -X 后面跟RESTful:GET, POST ...

-d 后面跟数据。(d = data to send)

1. 创建索引

指定ID 来建立新记录。(貌似PUT,POST都可以)

$ curl -XPOST localhost:9200/films/md/2 -d ' { "name":"heiyiren", "tag": "good"}'

使用自动生成的ID 建立新纪录:

$ curl -XPOST localhost:9200/films/md -d ' { "name":"ma da jiasi jia3", "tag": "good"}' 2. 查询:

2.1 查询所有的index, type:

$ curl localhost:9200/_search?pretty=true

2.2 查询某个index下所有的type:

$ curl localhost:9200/films/_search

2.3 查询某个index 下,某个type下所有的记录:

$ curl localhost:9200/films/md/_search?pretty=true

2.4 带有参数的查询:

$ curl localhost:9200/films/md/_search?q=tag:good

{"took":7,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":2,"m ax_score":1.0,"hits":[{"_index":"film","_type":"md","_id":"2","_score":1.0, "_source" : { "name":"heiyiren", "tag": "good"}},{"_index":"film","_type":"md","_id":"1","_score":0.30685282, "_source" : { "name":"ma da jiasijia", "tag": "good"}}]}}

2.5 使用JSON参数的查询:(注意query 和term 关键字)

$ curl localhost:9200/film/_search -d '

{"query" : { "term": { "tag":"bad"}}}'

3. 更新

$ curl -XPUT localhost:9200/films/md/1 -d { ...(data)... }

4. 删除

删除所有的:

$ curl -XDELETE localhost:9200/films

七、Java的API调用

ElasticSearch是一个基于Lucene构建的开源,分布式,RESTful搜索引擎框架。分布式是其最大的特点。安装比较简单,如果单机运行的话直接下载解压,在命令行下运行bin/elasticsearch就行了(win的dos和linux的窗口都行)。它能够通过http、restful、thrift 等方式访问。不过今天我们看的是使用最普通的java api来测试其功能。

1.获取client实例,连接本地9300端口

this.client = new TransportClient()

.addTransportAddress(new InetSocketTransportAddress(

"localhost", 9300));

2.生成一个索引。这里用Map来保存json数据,然后插入到index为“twitter”的索引里

面,其document为“tweet”,id为“1”。当然,生成json数据的方法很多,朋友们可

以查看相关api。

public void generateIndex() {

Mapjson = new HashMap();

json.put("user", "kimchy");

json.put("postDate", new Date());

json.put("message", "trying out Elastic Search");

IndexResponse response = this.client

.prepareIndex("twitter", "tweet", "1").setSource(json)

.execute().actionGet();

}

3.查询某个索引,这个一看就明白。

public void getIndex() {

GetResponse response = client.prepareGet("twitter", "tweet", "1")

.execute().actionGet();

MaprpMap = response.getSource();

if (rpMap == null) {

System.out.println("empty");

return;

}

Iterator>rpItor = rpMap.entrySet().iterator();

while (rpItor.hasNext()) {

EntryrpEnt = rpItor.next();

System.out.println(rpEnt.getKey() + " : " + rpEnt.getValue());

}

}

4. 搜索,创建一个termQuery查询,该查询要求全部匹配才会出结果,如果只要包含关键字里面一部分,可以创建fieldQuery。

public void searchIndex() {

QueryBuilderqb = QueryBuilders.termQuery("user", "kimchy"); SearchResponsescrollResp = client.prepareSearch("twitter")

.setSearchType(SearchType.SCAN)

.setScroll(new TimeValue(60000))

.setQuery(qb)

.setSize(100).execute().actionGet(); //100 hits per shard will be returned for each scroll

//Scroll until no hits are returned

while (true) {

scrollResp = client.prepareSearchScroll(scrollResp.getScrollId()).setScroll(new TimeValue(600000)).execute().actionGet();

for (SearchHit hit : scrollResp.getHits()) {

Iterator>rpItor = hit.getSource().entrySet().iterator();

while (rpItor.hasNext()) {

EntryrpEnt = rpItor.next();

System.out.println(rpEnt.getKey() + " : " + rpEnt.getValue());

}

}

//Break condition: No hits are returned

if (scrollResp.getHits().hits().length == 0) {

break;

}

}

}

5.删除,删除的时候要指定Id的,这里指定id为1.

public void deleteIndex() {

DeleteResponse response = client.prepareDelete("twitter", "tweet", "1")

.execute()

.actionGet();

}

6.操作完毕后别忘记最后一步:关闭client连接。

public void closeClient() {

client.close();

}

八、Java的实例操作

8.1 elasticsearch__1__java操作之连接es,创建Mapping,保存数据

内容涉及代码GitHub地址: 点击打开链接

官方API:

https://www.360docs.net/doc/ec4107713.html,/guide/en/elasticsearch/client/java-api/cu rrent/index.html

操作demo所用javabean

[java]view plaincopy

1.package com.elasticsearch;

2.

3.import https://www.360docs.net/doc/ec4107713.html,mon.collect.Lists;

4.import com.util.date.Joda_Time;

5.import https://www.360docs.net/doc/ec4107713.html,mon.xcontent.XContentBuilder;

6.import https://www.360docs.net/doc/ec4107713.html,mon.xcontent.XContentFactory;

7.

8.import java.io.IOException;

9.import java.util.Date;

10.import java.util.List;

11.

12./**

13. * Created by lw on 14-7-8.

14. */

15.public class User {

16.

17.private String name;

18.private String home;//家乡

19.private double height;//身高

20.private int age;

21.private Date birthday;

22.

23.public User() {

24. }

25.

26.public User(String name, String home, double height, int age, Date birth

day) {

https://www.360docs.net/doc/ec4107713.html, = name;

28.this.home = home;

29.this.height = height;

30.this.age = age;

31.this.birthday = birthday;

32. }

33.

34./**

35. * 随机生成一个用户信息

36. *

37. * @return

38. */

39.public static User getOneRandomUser() {

40.return new User("葫芦" + (int) (Math.random() * 1000) + "娃", "山西省

太原市" + (int) (Math.random() * 1000) + "街道

", (Math.random() * 1000), (int) (Math.random() * 100), new Date(System.curr entTimeMillis() - (long) (Math.random() * 100000)));

41. }

42.

43./**

44. * 随机生成num个用户信息

45. *

46. * @param num 生成数量

47. * @return

48. */

49.public static List getRandomUsers(int num) {

50. List users = Lists.newArrayList();

51.if (num < 0) num = 10;

52.for (int i = 0; i < num; i++) {

53. users.add(new User("葫芦" + (int) (Math.random() * 1000) + "娃

", "山西省太原市" + (int) (Math.random() * 1000) + "街道

", (Math.random() * 1000), (int) (Math.random() * 100), new Date(System.curr entTimeMillis() - (long) (Math.random() * 100000))));

54. }

55.

56.return users;

57. }

58.

59./**

60. * 封装对象的Json信息

61. *

62. * @param user

63. * @return

64. * @throws IOException

65. */

66.public static XContentBuilder getXContentBuilder(User user) throws IOExc

eption {

67.return XContentFactory.jsonBuilder()

68. .startObject()

69. .field("name", user.getName())//该字段在上面的方法中mapping定

义了,所以该字段就有了自定义的属性,比如 age等

70. .field("home", user.getHome())

71. .field("height", user.getHeight())

72. .field("age", user.getAge())

73. .field("birthday", user.getBirthday())

74. .field("state", "默认属性,mapping中没有定义")//该字段在上面方法

中的mapping中没有定义,所以该字段的属性使用es默认的.

75. .endObject();

76. }

77.

78.public String getName() {

79.return name;

80. }

81.

82.public void setName(String name) {

https://www.360docs.net/doc/ec4107713.html, = name;

84. }

85.

86.public String getHome() {

87.return home;

88. }

89.

90.public void setHome(String home) {

91.this.home = home;

92. }

93.

94.public double getHeight() {

95.return height;

96. }

97.

98.public void setHeight(double height) {

99.this.height = height;

100. }

101.

102.public int getAge() {

103.return age;

104. }

105.

106.public void setAge(int age) {

107.this.age = age;

108. }

109.

110.public Date getBirthday() {

111.return birthday;

112. }

113.

114.public void setBirthday(Date birthday) {

115.this.birthday = birthday;

116. }

117.

118.}

java与elasticsearch的交互demo

[java]view plaincopy

1.package com.framework_technology.elasticsearch;

2.

3.import org.elasticsearch.action.admin.indices.alias.IndicesAliasesRequestBui

lder;

4.import org.elasticsearch.action.admin.indices.alias.exists.AliasesExistReque

stBuilder;

5.import org.elasticsearch.action.admin.indices.alias.exists.AliasesExistRespo

nse;

6.import org.elasticsearch.action.admin.indices.create.CreateIndexRequestBuild

er;

7.import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;

8.import org.elasticsearch.action.admin.indices.stats.IndexStats;

9.import org.elasticsearch.action.bulk.BulkRequestBuilder;

10.import org.elasticsearch.action.bulk.BulkResponse;

11.import org.elasticsearch.action.index.IndexResponse;

12.import https://www.360docs.net/doc/ec4107713.html,mon.xcontent.XContentBuilder;

13.import https://www.360docs.net/doc/ec4107713.html,mon.xcontent.XContentFactory;

14.

15.import java.io.IOException;

16.import java.util.HashMap;

17.import java.util.List;

18.import java.util.Map;

19.

20./**

21. * Created by lw on 14-7-7.

22. *

23. * mapping创建

24. * 添加记录到es

25. */

26.public class Es_BuildIndex {

27.

28.

29./**

30. * 索引的mapping

31. *

32. * 预定义一个索引的mapping,使用mapping的好处是可以个性的设置某个字段等的属性

33. * Es_Setting.INDEX_DEMO_01类似于数据库

34. * mapping 类似于预设某个表的字段类型

35. *

36. * Mapping,就是对索引库中索引的字段名及其数据类型进行定义,类似于关系数据库中表

建立时要定义字段名及其数据类型那样,

37. * 不过es的 mapping比数据库灵活很多,它可以动态添加字段。

38. * 一般不需要要指定mapping都可以,因为es会自动根据数据格式定义它的类型,

39. * 如果你需要对某些字段添加特殊属性(如:定义使用其它分词器、是否分词、是否存储

等),就必须手动添加mapping。

40. * 有两种添加mapping的方法,一种是定义在配置文件中,一种是运行时手动提交

mapping,两种选一种就行了。

41. *

42. * @throws Exception Exception

43. */

44.protected static void buildIndexMapping() throws Exception {

45. Map settings = new HashMap<>();

46. settings.put("number_of_shards", 4);//分片数量

47. settings.put("number_of_replicas", 0);//复制数量

48. settings.put("refresh_interval", "10s");//刷新时间

49.

50.//在本例中主要得注意,ttl及timestamp如何用java ,这些字段的具体含义,请去到

es官网查看

51. CreateIndexRequestBuilder cib = Es_Utils.client.admin().indices().pr

epareCreate(Es_Utils.LOGSTASH_YYYY_MM_DD);

52. cib.setSettings(settings);

53.

54. XContentBuilder mapping = XContentFactory.jsonBuilder()

55. .startObject()

56. .startObject("we3r")//

57. .startObject("_ttl")//有了这个设置,就等于在这个给索引的记录增加

了失效时间,

58.//ttl的使用地方如在分布式下,web系统用户登录状态的维护.

59. .field("enabled", true)//默认的false的

60. .field("default", "5m")//默认的失效时间,d/h/m/s 即天/小时/分钟/

61. .field("store", "yes")

62. .field("index", "not_analyzed")

63. .endObject()

64. .startObject("_timestamp")//这个字段为时间戳字段.即你添加一条索

引记录后,自动给该记录增加个时间字段(记录的创建时间),搜索中可以直接搜索该字段.

65. .field("enabled", true)

66. .field("store", "no")

67. .field("index", "not_analyzed")

68. .endObject()

69.//properties下定义的name等等就是属于我们需要的自定义字

段了,相当于数据库中的表字段 ,此处相当于创建数据库表

70. .startObject("properties")

71. .startObject("@timestamp").field("type", "long").endObject()

72. .startObject("name").field("type", "string").field("store",

"yes").endObject()

73. .startObject("home").field("type", "string").field("index",

"not_analyzed").endObject()

74. .startObject("now_home").field("type", "string").field("inde

x", "not_analyzed").endObject()

75. .startObject("height").field("type", "double").endObject()

76. .startObject("age").field("type", "integer").endObject()

77. .startObject("birthday").field("type", "date").field("format

", "YYYY-MM-dd").endObject()

78. .startObject("isRealMen").field("type", "boolean").endObject

()

79. .startObject("location").field("lat", "double").field("lon",

"double").endObject()

80. .endObject()

81. .endObject()

82. .endObject();

83. cib.addMapping(Es_Utils.LOGSTASH_YYYY_MM_DD_MAPPING, mapping);

84. cib.execute().actionGet();

85. }

86.

87./**

88. * 给 []index 创建别名

89. * 重载方法可以按照过滤器或者Query 作为一个别名

90. *

91. * @param aliases aliases别名

92. * @param indices 多个 index

93. * @return 是否完成

94. */

95.protected static boolean createAliases(String aliases, String... indices

) {

96. IndicesAliasesRequestBuilder builder = Es_Utils.client.admin().indic

es().prepareAliases();

ElasticSearch面试题

1:es介绍 Elasticsearch是一个基于Lucene的实时的分布式搜索和分析引擎。设计用于云计算中, 能够达到实时搜索,稳定,可靠,快速,安装使用方便。基于RESTful接口。 普通请求是...get?a=1 rest请求....get/a/1 2:全文搜索的工具有哪些 Lucene Solr Elasticsearch 3:es的bulk的引用场景 1.bulk API可以帮助我们同时执行多个请求 2.create 和index的区别 如果数据存在,使用create操作失败,会提示文档已经存在,使用index则可以成功执行。 3.可以使用文件操作 使用文件的方式 vi requests curl -XPOST/PUT localhost:9200/_bulk --data-binary @request; bulk请求可以在URL中声明/_index 或者/_index/_type 4.bulk一次最大处理多少数据量 bulk会把将要处理的数据载入内存中,所以数据量是有限制的 最佳的数据量不是一个确定的数值,它取决于你的硬件,你的文档大小以及复杂性,你的索引以及搜索的负载 一般建议是1000-5000个文档,如果你的文档很大,可以适当减少队列,大小建议是 5-15MB,默认不能超过100M, 可以在es的配置文件中修改这个值http.max_content_length: 100mb 5.版本控制的一个问题 在读数据与写数据之间如果有其他线程进行写操作,就会出问题,es使用版本控制才避免这种问题。 在修改数据的时候指定版本号,操作一次版本号加1。 6.es的两个web访问工具

elasticsearch学习文档

1.全文搜索引擎elasticsearch 1.1.Elasticsearch简介 Elasticsearch是开源的,分布式的,提供rest接口,支持云端调用的,构建在Apache Lucene之上的搜索引擎。 1.2.优点&缺点 优点:开箱即用,分布式,rest 接口,支持云端调用。 缺点:没有大量商业产品应用。分片的数目不能动态调整,只能在初始化索引的时候指定。 2.E lasticsearch的安装 2.1.运行环境 JDK6以上 2.2.下载Elasticsearch 为了更好的对中文进行分词,减少配置问题,下载集成分词的elasticsearch-rtf(基于elasticsearch 0.90.0,目前elasticsearch更新到0.90.5)版本。Rtf集成了ik、mmseg分词以及searchwrapper、thrift等插件。 什么是ElasticSearch-RTF? RTF是Ready To Fly的缩写,在航模里面,表示无需自己组装零件即可直接上手即飞的航空模型,elasticsearch-RTF是针对中文的一个发行版,即使用最新稳定的elasticsearch版本,并且帮你下载测试好对应的插件,如中文分词插件等,还会帮你做好一些默认的配置,目的是让你可以下载下来就可以直接的使用。下载地址如下:https://https://www.360docs.net/doc/ec4107713.html,/medcl/elasticsearch-rtf

注释:分词是用于模糊匹配的时候,是把一段话当成词语还是当成单个字来搜索的规则。 2.3.安装 解压elasticsearch-rtf-mast.zip到你指定的目录下即可。 2.4.运行 2.4.1.启动服务 cd/usr/local/elasticsearch/bin/service ./elasticsearch start 第一次启动服务后,在/usr/local/elasticsearch目录生成data目录和logs目录2.4.2.停止服务 cd/usr/local/elasticsearch/bin/service ./elasticsearch stop 3.e lasticsearch配置文件详解 elasticsearch.yml配置文件内容较多,挑几个可能会用的说一下。 https://www.360docs.net/doc/ec4107713.html,: elasticsearch 配置es的集群名称,默认是elasticsearch,es会自动发现在同一网段下的es,如果在同一网段下有多个集群,就可以用这个属性来区分不同的集群。 https://www.360docs.net/doc/ec4107713.html,: "Franz Kafka" 节点名,默认随机指定一个name列表中名字,该列表在es的jar包中config文件夹里name.txt 文件中,其中有很多作者添加的有趣名字。 node.master: true 指定该节点是否有资格被选举成为node,默认是true,es是默认集群中的第一台机器为master,如果这台机挂了就会重新选举master。 network.bind_host: 192.168.0.1

ElasticSearch使用手册

ElasticSearch使用手册 一、ElasticSearch简介 1.1.什么是ElasticSearch ElasticSearch(以下均检查ES)是Compass(基于Lucene开源项目)作者Shay Banon在2010年发布的高性能、实时、分布式的开源搜索引擎。后来成立了ElasticSearch公司,负责ES相关产品的开发及商用服务支持,ES依旧采用免费开源模式,但部分插件采用商用授权模式,例如Marvel插件(负责ES的监控管理)、Shield插件(提供ES的授权控制)。 1.2.ElasticSearch的基础概念 ?Collection 在SolrCloud集群中逻辑意义上的完整的索引。它常常被划分为一个或多个Shard,它们使用相同的Config Set。如果Shard数超过一个,它就是分布式索引,SolrCloud让你通过Collection名称引用它,而不需要关心分布式检索时需要使用的和Shard相关参数。 ?Config Set Solr Core提供服务必须的一组配置文件。每个config set有一个名字。最小需要包括solrconfig.xml (SolrConfigXml)和schema.xml (SchemaXml),除此之外,依据这两个文件的配置内容,可能还需要包含其它文件。它存储在Zookeeper中。Config sets可以重新上传或者使用upconfig命令更新,使用Solr的启动参数bootstrap_confdir指

定可以初始化或更新它。 ?Core Core也就是Solr Core,一个Solr中包含一个或者多个Solr Core,每个Solr Core可以独立提供索引和查询功能,每个Solr Core对应一个索引或者Collection的Shard,Solr Core的提出是为了增加管理灵活性和共用资源。在SolrCloud中有个不同点是它使用的配置是在Zookeeper中的,传统的Solr core的配置文件是在磁盘上的配置目录中。 ?Leader 赢得选举的Shard replicas。每个Shard有多个Replicas,这几个Replicas需要选举来确定一个Leader。选举可以发生在任何时间,但是通常他们仅在某个Solr实例发生故障时才会触发。当索引documents时,SolrCloud会传递它们到此Shard对应的leader,leader 再分发它们到全部Shard的replicas。 ?Replica Shard的一个拷贝。每个Replica存在于Solr的一个Core中。一个命名为“test”的collection以numShards=1创建,并且指定replicationFactor设置为2,这会产生2个replicas,也就是对应会有2个Core,每个在不同的机器或者Solr实例。一个会被命名为test_shard1_replica1,另一个命名为test_shard1_replica2。它们中的一个会被选举为Leader。 ?Shard

elasticSearch

ElasticSearch:可扩展的开源弹性搜索解决方案 开源的分布式搜索引擎支持时间时间索引和全文检索。 索引:index 存放数据 类型:type 区分储存的对象 文档:document 储存的主要实体 页面: field 角色关系对照 elasticsearch 跟 MySQL 中定义资料格式的角色关系对照表如下 MySQL elasticsearch database index table type table schema mapping row document field field http://localhost:9200/mishu_index/hunanzhaobiaowang/ _search?q=title:嘉禾县基本烟田土地整理施工 ElasticSearch官网:https://www.360docs.net/doc/ec4107713.html,/ 先上一张elasticsearch的总体框架图:

ElasticSearch是基于Lucene开发的分布式搜索框架,包含如下特性: 分布式索引、搜索 索引自动分片、负载均衡 自动发现机器、组建集群 支持Restful 风格接口 配置简单等。 下图是ElasticSearch的第三方插件管理工具,通过它可以很清晰的看到它索引分布的情况:哪块分布在那里,占用空间多少都可以看到,并且可以管理索引。

当一台机挂了时,整个系统会对挂机里的内容重新分配到其它机器上,当挂掉的机重新加 入集群时,又会重新把索引分配给它。当然,这些规则都是可以根据参数进行设置的,非 常灵活。ElasticSearch是先把索引的内容保存到内存之中,当内存不够时再把索引持久化 到硬盘中,同时它还有一个队列,是在系统空闲时自动把索引写到硬盘中。 的后端存储方式可以有一下四种: 1. 像普通的 Lucene 索引,存储在本地文件系统中; 2. 存储在分布式文件系统中,如 freeds; 3. 存储在 Hadoop 的 hdfs中; 4. 存储在亚马逊的 S3 云平台中。 它支持插件机制,有丰富的插件。比如和 mongoDB、couchDB 同步的river 插件,分词插件,Hadoop 插件,脚本支持插件等。 下面介绍elasticsearch的几个概念: cluster 代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产 生的,主从节点是对于集群内部来说的。es 的一个概念就是去中心化,字面上理解就是无 中心节点,这是对于集群外部来说的,因为从外部来看 es 集群,在逻辑上是个整体,与 任何一个节点的通信和与整个es 集群通信是等价的。在配置文件中可以配置集群的名字,在同一局域网内的机器,配置相同的cluster名字,将会自动组建集群,不需要其它特殊配置。 shards

Elasticsearch权威指南(中文版)

Elasticsearch 权威指南(中文版) 1、入门 Elasticsearch是一个实时分布式搜索和分析引擎。它让你以前所未有的速度 处理大数据成为可能。 它用于全文搜索、结构化搜索、分析以及将这三者混合使用: 维基百科使用Elasticsearch提供全文搜索并高亮关键字,以及输入实时搜索(search-as-you-type)和搜索纠错(did-you-mean)等搜索建议功能。 英国卫报使用Elasticsearch结合用户日志和社交网络数据提供给他们的编辑以实时的反馈,以便及时了解公众对新发表的文章的回应。StackOverflow结合全文搜索与地理位置查询,以及more-like-this功能来找到相关的问题和答案。 Github使用Elasticsearch检索1300亿行的代码。 但是Elasticsearch不仅用于大型企业,它还让像DataDog以及Klout这样的创业公司将最初的想法变成可扩展的解决方案。Elasticsearch可以在你的笔记本上运行,也可以在数以百计的服务器上处理PB级别的数据。Elasticsearch所涉及到的每一项技术都不是创新或者革命性的,全文搜索, 分析系统以及分布式数据库这些早就已经存在了。它的革命性在于将这些独立且有用的技术整合成一个一体化的、实时的应用。它对新用户的门槛很低,当然它也会跟上你技能和需求增长的步伐。 如果你打算看这本书,说明你已经有数据了,但光有数据是不够的,除非你能对这些数据做些什么事情。

很不幸,现在大部分数据库在提取可用知识方面显得异常无能。的确,它们能够通过时间戳或者精确匹配做过滤,但是它们能够进行全文搜索,处理同义词和根据相关性给文档打分吗?它们能根据同一份数据生成分析和聚合的结果吗?最重要的是,它们在没有大量工作进程(线程)的情况下能做到对数据的实时处理吗? 这就是Elasticsearch存在的理由:Elasticsearch鼓励你浏览并利用你的数 据,而不是让它烂在数据库里,因为在数据库里实在太难查询了。Elasticsearch是你新认识的最好的朋友。 1.1、是什么 为了搜索,你懂的 Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎。无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。 但是,Lucene只是一个库。想要使用它,你必须使用Java来作为开发语言并将其直接集成到你的应用中,更糟糕的是,Lucene非常复杂,你需要深入了解检索的相关知识来理解它是如何工作的。 Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。 不过,Elasticsearch不仅仅是Lucene和全文搜索,我们还能这样去描述它: ?分布式的实时文件存储,每个字段都被索引并可被搜索 ?分布式的实时分析搜索引擎 ?可以扩展到上百台服务器,处理PB级结构化或非结构化数据

ElasticSearch5.1 基本概念和配置详解

二、几个基本概念 接近实时(NRT) Elasticsearch 是一个接近实时的搜索平台。这意味着,从索引一个文档直到这个文档能够被搜索到有一个很小的延迟(通常是1 秒)。 集群(cluster) 代表一个集群,集群中有多个节点(node),其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。es的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看es集群,在逻辑上是个整体,你与任何一个节点的通信和与整个es集群通信是等价的。 索引(index)

ElasticSearch将它的数据存储在一个或多个索引(index)中。用SQL领域的术语来类比,索引就像数据库,可以向索引写入文档或者从索引中读取文档,并通过ElasticSearch内部使用Lucene将数据写入索引或从索引中检索数据。文档(document) 文档(document)是ElasticSearch中的主要实体。对所有使用ElasticSearch 的案例来说,他们最终都可以归结为对文档的搜索。文档由字段构成。 映射(mapping) 所有文档写进索引之前都会先进行分析,如何将输入的文本分割为词条、哪些词条又会被过滤,这种行为叫做映射(mapping)。一般由用户自己定义规则。类型(type) 每个文档都有与之对应的类型(type)定义。这允许用户在一个索引中存储多种文档类型,并为不同文档提供类型提供不同的映射。 分片(shards) 代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。 副本(replicas) 代表索引副本,es可以设置多个索引的副本,副本的作用一是提高系统的容错性,当个某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高es的查询效率,es会自动对搜索请求进行负载均衡。 数据恢复(recovery)

ElasticSearch

ElasticSearch ES评估资料 通过开发机登陆hadoop03:9200/_plugin/sql 可以访问 ES调研结果 以下是我们对于ES的调研结果(调研主要是锦明完成的,我主要把各项数据总结一下) 我们已经在开发机上部署了ES以及ES SQL,ES Hadoop插件,大家如果要访问ES SQL的话可以通过开发机登陆 hadoop03:9200/_plugin/sql 1. 1. 使用方式: 目前在我们的环境中ES大致有下面三种使用方式可供先择: a) 调用Estate的restfule API/Java API用于做数据的增删改查。经测试这种方法效率最高 b) 布署ES-SQL插件,提供SQL的方式插入,删除,修改以及查询; c) 布置es-hadoop插件,将es与hive集成; 通过hive SQL进行数据的批量插入和查询 1. 2. 性能评估 测试对象:user_basic_es2,记录数目74228947,字段数70-80

使用方式 操作 API ES-SQL HIVE 批量插入7500万40mins(数据要提前准备好) 不支持90mins 批量更新7500万40mins(数据提前准备好)不支持现有配置Hive语法不支持更新 删除数据1s 1s 现有配置Hive方法不支持更新 单表查询-where过滤 1s 1s 60mins 单表查询-Group By 1s 1s 60mins Hive之所以查询慢是因为hive并没有用到ES的索引,查询的时候只是把数据都读了出来在map端进行过滤以及之后的操作,所以完全没法使用 而ES SQL会把查询翻译程API,然后使用API发起查询下面是几段测试SQL,都在1s返回结果: a) Select count(*) from user_basic_es2 ; b) Select address_city, gender, count(*) from user_basic_es2 group by address_city, gender c) Select count(*) from user_basic_es2 where gender=’male’ and address_city=’上’ (result 17274) d) Select user_id from user_basic_es2 where gender=’male’ (result 61647932) 从上面的结果来看,基本1-2s能返回查询结果 1. 3. 各种使用方式优缺点评估 优势 使用 方式 优势劣势适用场景 API 提供所有的ES功能;最快速需要开发应用来更新及展示数据需求很灵活的情况下 ES-SQL 使用方便;将SQL解析成ES 查询,所以响应快速 不支持数据的插入更新;不能与HIVE中的其他 数据一起使用 用于数据的查询 HIVE 可以同时访问存储在 HDFS/HBASE/ES中的数据 只将ES作为简单的数据存储,并不将SQL解 析成ES查询,所以速度最慢;不能分字段更新 数据,一次只能更新所有字段 用于将hive中的数 据算好以后批量存入 供后续查询 1. 4. ES占用的存储HDFS: 1.3GB ES: 42GB

大数据技术之elasticsearch【下】

大数据技术之Elasticsearch【下】 3.1.6 新建文档(源数据map方式添加json) 1)源代码 @Test public void createIndexByMap() { // 1 文档数据准备 Map json = new HashMap(); json.put("id", "2"); json.put("title", "基于Lucene的搜索服务器"); json.put("content", "它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口"); // 2 创建文档 IndexResponse indexResponse = client.prepareIndex("blog", "article", "2").setSource(json).execute().actionGet(); // 3 打印返回的结果 System.out.println("index:" + indexResponse.getIndex()); System.out.println("type:" + indexResponse.getType()); System.out.println("id:" + indexResponse.getId()); System.out.println("version:" + indexResponse.getVersion()); System.out.println("result:" + indexResponse.getResult()); // 4 关闭连接 client.close(); } 2)结果查看 3.1.7 新建文档(源数据es构建器添加json) 1)源代码

ElasticSearch基础知识

Elasticsearch介绍 Elasticsearch是个全文搜索服务器,简称ES,它相当于一个数据库,也有增删改查操作。为什么不直接用数据库呢?因为在全文搜索方面它比数据库更快、更智能。 更快:倒排索引,对文档分词,给每一个词建立索引,标记在那一条记录中有出现 更智能:对数据进行分词,分词之后进行标准化处理,它可以搜索匹配度、大小写、近义词等 Elasticsearch head和kibana两种客户端工具可选,使用Restfull风格的查询语句Elasticsearch和mysql结构对比 Restfull风格的查询语句

ES在wonder 的使用架构 索引index 由具有相同字段的文档列表组成,相当于mysql中的表。?每个索引都有自己的mapping定义,用于定义字段名和类型 ?索引中存储着具有相同结构的文档

节点Node 一个Elasticsearch的运行实例,集群的其中一个构成单元。 正排索引 维护文档id到内容、单词的关联关系,例如 倒排索引 MySQL like查询需要一行一行的查找,ES有了倒排索引就就能知道关键字在第几行出现了。加快了查询效率,标准化处理是搜索更加智能,意思大小写、匹配度、同义词、 维护单词到文档id的关联关系,例如 分片 分片是Elasticsearch在集群周围分发数据的单位。Elasticsearch在重新平衡数据时(例如发

生故障后)移动分片的速度取决于分片的大小和数量以及网络和磁盘性能。 文档Document 文档Document 核心数据类型 用户存储在es中的数据文档,相当于mysql的表中的一行,Json结构形式,由字段组成,常见数据类型如下: ●字符串:text、keyword,text是分词,keyword是不分词的 ●数值型:long、integer、short、byte、double、float、half_float、scaled_float ●布尔:boolean ●日期:date 不分词,必须全匹配 ●二进制:binary ●范围类型:integer_range、float_range、long_range、double_range、date_range

Elasticsearch工具类使用介绍

Elasticsearch工具类使用说明 目录 1. 连接Elasticsearch服务 (2) 2. 创建索引 (2) 3. 删除索引 (2) 4. 获取索引 (2) 5. 插入数据 (2) 6. 批量插入数据 (2) 7. 更新数据 (3) 8. 批量更新数据 (3) 9. 删除数据 (3) 10. 批量删除数据 (3) 11. 根据id查询数据 (3) 12. 根据id批量查询数据 (3) 13. 统计count (4) 14. 分组统计count (4) 15. 根据条件查询一条数据 (4) 16. 根据条件查询一批数据 (4) 17. 根据条件查询一页数据 (5) 18. 分组查询 (5) 19. 滚动查询数据 (6)

//第一种创建索引test impl.getElasticsearchUtil().createIndex("test"); // 第二种创建索引test,指定字段,分片数,副本数 List columns = new ArrayList<>(); Field col = new Field(); col.setName("city"); col.setType(Field.type_keyword); columns.add(col); Field col1 = new Field(); col1.setName("age"); col1.setType(Field.type_integer); columns.add(col1); Field col2 = new Field(); col2.setName("birth"); col2.setType(Field.type_date); col2.setFormat(Field.date_format_simple); columns.add(col2); impl.getElasticsearchUtil().createIndex("test", columns, 5, 1); 3.删除索引 // 删除索引test impl.getElasticsearchUtil().deleteIndex("test"); 4.获取索引 // 获取集群中所有的索引名称 List indices = impl.getAllIndexs(); 5.插入数据 // 插入数据 JSONObject data = new JSONObject(); data.put("id", "1");//id如果不指定,会自动生成uuid data.put("age", 43); data.put("city", "南京"); data.put("birth", "1975-10-12"); impl.addData("test", data, "id"); 6.批量插入数据 // 批量插入数据 List datas = new ArrayList<>(); JSONObject data1 = new JSONObject(); data1.put("id", "1"); data1.put("age", 43); data1.put("city", "南京");

Elasticsearch-权威指南(中文版)

Elasticsearch 权威指南(中文版) 1、入门 Elasticsearch 是一个实时分布式搜索和分析引擎。它让你以前所未有的速度 处理大数据成为可能。 它用于全文搜索、结构化搜索、分析以及将这三者混合使用: 维基百科使用Elasticsearch 提供全文搜索并高亮关键字,以及输入实时搜索(search-as-you-type) 和搜索纠错(did-you-mean) 等搜索建议功能。 英国卫报使用Elasticsearch 结合用户日志和社交网络数据提供给他们的编辑 以实时的反馈,以便及时了解公众对新发表的文章的回应。 StackOverflow 结合全文搜索与地理位置查询,以及more-like-this 功能 来找到相关的问题和答案。 Github 使用Elasticsearch 检索1300 亿行的代码。 但是Elasticsearch 不仅用于大型企业,它还让像DataDog 以及Klout这样 的创业公司将最初的想法变成可扩展的解决方案。Elasticsearch 可以在你的 笔记本上运行,也可以在数以百计的服务器上处理PB级别的数据。Elasticsearch 所涉及到的每一项技术都不是创新或者革命性的,全文搜索, 分析系统以及分布式数据库这些早就已经存在了。它的革命性在于将这些独立 且有用的技术整合成一个一体化的、实时的应用。它对新用户的门槛很低,当然它也会跟上你技能和需求增长的步伐。 如果你打算看这本书,说明你已经有数据了,但光有数据是不够的,除非你能对这些数

Elasticsearch 权威指南(中文版)据做些什么事情。

很不幸,现在大部分数据库在提取可用知识方面显得异常无能。的确,它们能够通过时间戳或者精确匹配做过滤,但是它们能够进行全文搜索,处理同义词和根据相关性给文档打分吗?它们能根据同一份数据生成分析和聚合的结果吗?最重要的是,它们在没有大量工作进程(线程)的情况下能做到对数据的实时处理吗? 这就是Elasticsearch 存在的理由:Elasticsearch 鼓励你浏览并利用你的数 据,而不是让它烂在数据库里,因为在数据库里实在太难查询了。 Elasticsearch 是你新认识的最好的朋友。 1.1、是什么 为了搜索,你懂的 Elasticsearch 是一个基于Apache Lucene(TM) 的开源搜索引擎。无论在开 源还是专有领域,Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。 但是,Lucene只是一个库。想要使用它,你必须使用Java来作为开发语言并将其直接 集成到你的应用中,更糟糕的是,Lucene非常复杂,你需要深入 了解检索的相关知识来理解它是如何工作的。 Elasticsearch 也使用Java开发并使用Lucene作为其核心来实现所有索引 和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂 性,从而让全文搜索变得简单。 不过,Elasticsearch 不仅仅是Lucene和全文搜索,我们还能这样去描述它: 分布式的实时文件存储,每个字段都被索引并可被搜索 分布式的实时分析搜索引擎 可以扩展到上百台服务器,处理PB级结构化或非结构化数据

全文搜索引擎 Elasticsearch 入门教程

全文搜索引擎 Elasticsearch 入门教 程 全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 Elastic )是目前全文搜索引擎的首选。 它可以快速地储存、搜索和分析海量数据。维基百科、Stack Overflow 、Github 都采用它。 Elastic 的底层是开源库 Lucene 。但是,你没法直接用 Lucene ,必须自己写代码去调用它的接口。Elastic 是 Lucene 的封装,提供了 REST API 的操作接口,开箱即用。 本文从零开始,讲解如何使用 Elastic 搭建自己的全文搜索引擎。每一步都有详细的说明,大家跟着做就能学会。 一、安装 Elastic 需要 Java 8 环境。如果你的机器还没安装 Java ,可以参考这篇文章,注意要保证环境变量JAVA_HOME 正确设置。 安装完 Java ,就可以跟着官方文档安装 Elastic 。直接下载压缩包比较简单。 1 2 $ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-

3 5.5.1.zip $ unzip elasticsearch-5.5.1.zip $ cd elasticsearch-5.5.1/ 接着,进入解压后的目录,运行下面的命令,启动 Elastic 。 1 $ ./bin/elasticsearch 如果这时报错“max virtual memory areas vm.max map count [65530] is too low”,要运行下面的命令。 1 $ sudosysctl -w vm.max_map_count=262144 如果一切正常,Elastic 就会在默认的9200端口运行。这时,打开另一个命令行窗口,请求该端口,会得到说明信息。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 $ curl localhost:9200 { "name" : "atntrTf", "cluster_name" : "elasticsearch", "cluster_uuid" : "tf9250XhQ6ee4h7YI11anA", "version" : { "number" : "5.5.1", "build_hash" : "19c13d0", "build_date" : "2017-07-18T20:44:24.823Z", "build_snapshot" : false, "lucene_version" : "6.6.0" }, "tagline" : "You Know, for Search" }

相关主题
相关文档
最新文档