和 Solr 一样, Elasticsearch 是一个基于全文搜索引擎 Apache Lucene(TM) 基础上的搜索引擎. 没怎么用 Solr, 所以不好做各方面比较. 而厂里的 CRM 系统用的就是 Elasticsearch. Elasticsearch 不仅可以支持全文搜索, 同时也支持类似关系数据库的结构化查询. 它可以让你搜索并利用那些在数据库中难以查询的数据. Elasticsearch 还可以做聚合(aggregations), 可以在数据上进行复杂的分析统计.
Elasticsearch 的 RESTful API是基于 HTTP 协议, 以 JSON 作为数据格式的. 所以, 经常写出, 语法上经常写出跟 JavaScript 那样一大串开闭括号.
形如:
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
{
"cluster_name" : "elasticsearch_xguox",
"nodes" : {
"8fM1_dseTUWL74TiDTCPiA" : {
"name" : "Thinker",
"transport_address" : "inet[/127.0.0.1:9300]",
"host" : "XguoXs-MacBook-Pro.local",
"version" : "1.6.0",
"build" : "cdd3ac4",
"http_address" : "inet[/127.0.0.1:9200]",
"settings" : {
"path" : {
"data" : "/usr/local/var/elasticsearch/",
"logs" : "/usr/local/var/log/elasticsearch",
"plugins" : "/usr/local/var/lib/elasticsearch/plugins",
"home" : "/usr/local/Cellar/elasticsearch/1.6.0"
},
"cluster" : {
"name" : "elasticsearch_xguox"
},
"name" : "Thinker",
"index" : {
"analysis" : {
"analyzer" : {
"ik_smart" : {
"type" : "ik",
"use_smart" : "true"
},
"ik" : {
"type" : "org.elasticsearch.index.analysis.IkAnalyzerProvider",
"alias" : [ "ik_analyzer" ]
},
"ik_max_word" : {
"type" : "ik",
"use_smart" : "false"
}
}
}
},
"client" : {
"type" : "node"
},
"foreground" : "yes",
"config.ignore_system_properties" : "true",
"config" : "/usr/local/Cellar/elasticsearch/1.6.0/config/elasticsearch.yml",
"script" : {
"inline" : "on",
"indexed" : "on"
},
"network" : {
"host" : "127.0.0.1"
}
}
}
}
}
|
而且, 经常是嵌套的很深, 不是漏了逗号就是冒号或者开闭大括号 ヾ(´・ ・`。)ノ”
好吧, 其实上面那段不是正规的数据格式, 只是执行
curl "localhost:9200/_nodes/settings?pretty=true"
得到的结果. 主要是安装完 Elasticsearch 后的一些相关配置信息等等.
安装
Mac OS X 上直接用 homebrew 就可以 install 了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
Distributed search & analytics engine
https://www.elastic.co/products/elasticsearch
/usr/local/Cellar/elasticsearch/1.6.0 (34 files, 29.6M) *
Built from source
From: https://github.com/Homebrew/homebrew/blob/master/Library/Formula/elasticsearch.rb
==> Caveats
Data: /usr/local/var/elasticsearch/elasticsearch_xguox/
Logs: /usr/local/var/log/elasticsearch/elasticsearch_xguox.log
Plugins: /usr/local/Cellar/elasticsearch/1.6.0/libexec/plugins/
Config: /usr/local/etc/elasticsearch/
plugin script: /usr/local/Cellar/elasticsearch/1.6.0/libexec/bin/plugin
To reload elasticsearch after an upgrade:
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.elasticsearch.plist
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.elasticsearch.plist
Or, if you don't want/need launchctl, you can just run:
elasticsearch
|
VPS(Ubuntu 14.04) 上可以参考这里
BTW,
elasticsearch.yml 里面的 network.host: 127.0.0.1
默认的 Elasticsearch 是绑定了只允许本地 127.0.0.1
访问的, 在本地或者一般的生产环境足够了, 但是, 如果是一个集群跑在多个服务器的话就要在这里设置.
添加插件
中文分词
Elasticsearch 默认的分词对英语支持的已经挺好的, 但是对中文的分词支持却很渣. 貌似几乎没分词可言. 默认的standard analyser 直接拆分成单个字了. 有个 smartcn 的 analyser 评价也一般.
所以, 用的比较多的插件是 ik 和 mmseg. 对应的 Readme 都介绍的挺详细的.
注意拷贝词库就是了, 之前就是搞了个乌龙折腾半天. 直接把 mmseg 或者 ik 整个拷到跟 elasticsearch.yml 同一层目录下就行 = . =
Update, 新版不用配置直接解压把文件拷好就可以用了.
然后配置一下
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
29
30
31
|
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
# index:
# analysis:
# analyzer:
# mmseg:
# alias: [news_analyzer, mmseg_analyzer]
# type: org.elasticsearch.index.analysis.MMsegAnalyzerProvider
# index.analysis.analyzer.default.type : "mmseg"
# index:
# analysis:
# tokenizer:
# mmseg_maxword:
# type: mmseg
# seg_type: "max_word"
# mmseg_complex:
# type: mmseg
# seg_type: "complex"
# mmseg_simple:
# type: mmseg
# seg_type: "simple"
|
几乎全都是开箱即用的节奏 Σ( ̄。 ̄ノ)ノ
Elasticsearch on Rails
Elasticsearch More Like This 搜索
Elasticsearch Aggregations 聚合分析
Upgrade Elasticsearch to 2.3
Elasticsearch Scroll (Ruby)
Elasticsearch analysis & 自定义 analyzers
Elasticsearch 如何不用停机情况下完成 mapping 的修改