1. 起步
1. 建demo工程,看文档,做典型demo
2. 资源列表:
http://es.xiaoleilu.com/010_Intro/10_Installing_ES.html
3. 启动:
elasticsearch.bat
启动完成后
用ARC工具访问 http://localhost:9200/
这说明你的ELasticsearch集群已经启动并且正常运行,接下来我们可以开始各种实验了。
https://imququ.com/post/elasticsearch.html 用ElasticSearch进行全文搜索示例
2. 安装分词器
编译IK分词器
E:\002.tools\apache-maven-3.0.4\bin\mvn.bat package
编译过程中遇到 早先配置的oschina镜像停止了
用 <url>http://repo2.maven.org/maven2/</url>
修改 C:\Users\chen.simon\.m2 settings.xml配置
如果一切顺利,在 target/releases/
目录下可以找到编好的文件。将其解压并拷到 ~/es_root
对应目录:
mkdir -p ~/es_root/plugins/ik/
unzip target/releases/elasticsearch-analysis-ik-1.9.0.zip -d ~/es_root/plugins/ik/
elasticsearch-analysis-ik 的配置文件在 ~/es_root/plugins/ik/config/ik/
目录,很多都是词表,直接用文本编辑器打开就可以修改,改完记得保存为 utf-8 格式。
现在再启动 Elasticsearch 服务,如果看到类似下面这样的信息,说明 IK Analysis 插件已经装好了:
java.lang.IllegalArgumentException: Plugin [analysis-ik] is incompatible with Elasticsearch [2.4.0]. Was designed for version [2.3.0]
晕 这个版本不兼容elasticsearch2.4.0
去github重新找
这个是匹配的 并且这个是编译好的 无需mvn package 直接解开用
将他source包拿下来 以便以后使用
增加java启动参数 以便调试
在elasticsearch.bat中 "%JAVA_HOME%\bin\java开头的这一行 %JAVA_OPTS%后面 -Xdebug -Xrunjdwp:transport=dt_socket,address=8500,server=y,suspend=y
elasticsearch所在路径 不能有含有空格 否则会出现诡异的权限问题(空格转成了%20了)
配置同义词
Elasticsearch 自带一个名为 synonym 的同义词 filter。为了能让 IK 和 synonym 同时工作,我们需要定义新的 analyzer,用 IK 做 tokenizer,synonym 做 filter。听上去很复杂,实际上要做的只是加一段配置。
打开 ~/es_root/config/elasticsearch.yml 文件,加入以下配置:
index: analysis: analyzer: ik_syno: type: custom tokenizer: ik_max_word filter: [my_synonym_filter] ik_syno_smart: type: custom tokenizer: ik_smart filter: [my_synonym_filter] filter: my_synonym_filter: type: synonym synonyms_path: analysis/synonym.txt
以上配置定义了 ik_syno 和 ik_syno_smart 这两个新的 analyzer,分别对应 IK 的 ik_max_word 和 ik_smart 两种分词策略。根据 IK 的文档,二者区别如下:
ik_max_word:会将文本做最细粒度的拆分,例如「中华人民共和国国歌」会被拆分为「中华人民共和国、中华人民、中华、华人、人民共和国、人民、人、民、共和国、共和、和、国国、国歌」,会穷尽各种可能的组合;
ik_smart:会将文本做最粗粒度的拆分,例如「中华人民共和国国歌」会被拆分为「中华人民共和国、国歌」;
ik_syno 和 ik_syno_smart 都会使用 synonym filter 实现同义词转换。为了方便后续测试,建议创建~/es_root/config/analysis/synonym.txt 文件,输入一些同义词并存为 utf-8 格式。例如:
ua,user-agent,userAgent js,javascript 谷歌=>google
----
准备测试
3. 基本概念
4. 创建index
响应:
这就创建了一个simon的index 相当于mysql的database 再次发送这个请求 服务器就回400 bad request
注意此时http method 为put
如果使用get的http method 便能查询到此index的信息:
相关文档:
https://www.elastic.co/guide/en/elasticsearch/reference/2.4/indices-create-index.html
5. 创建mapping
Type 不用单独创建,在创建 Mapping 时指定就可以。Mapping 用来定义 Document 中每个字段的类型、所使用的 analyzer、是否索引等属性,非常关键。创建 Mapping 的代码示例如下:
url http://localhost:9200/simon/_mapping/article
{ "properties": { "title": { "type": "string", "term_vector": "with_positions_offsets", "analyzer": "ik_syno", "search_analyzer": "ik_syno" }, "content": { "type": "string", "term_vector": "with_positions_offsets", "analyzer": "ik_syno", "search_analyzer": "ik_syno" }, "slug": { "type": "string" }, "tags": { "type": "string", "index" : "not_analyzed" }, "update_date": { "type" : "date", "index" : "not_analyzed" } } }
注意: 如果报 elasticseatch analyzer [ik_syno] not found for field 则需要检查elasticsearch.yml文件中是否配置了此分析器
响应:
6. 加入数据
url http://localhost:9200/simon/article/1 方法:put
1表示这条数据的id
报文:
{ "title" : "什么是 JS?", "slug" :"what-is-js", "tags" : ["JS", "JavaScript", "TEST"], "content" : "JS 是 JavaScript 的缩写!", "update_date" : "2015-12-15T13:05:55Z" }
http://localhost:9200/simon/article/_search 这个可以查到加入的数据
简单的查询也可以 http://localhost:9200/simon/article/_search?q=js
更复杂的查询就需要 query dsl了