elasticsearch学习笔记
文章目录
介绍
Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎。它能帮助你搜索、分析和浏览数据,而往往大家并没有在某个项目一开始就预料到需要这些功能。Elasticsearch之所以出现就是为了重新赋予原始数据新的活力。
学习过程中主要参考:
- 官方文档
- Elasticsearch权威指南
- github中的案例
提醒
注意先查看自己使用的elasticsearch的版本。Open edX中目前使用的elasticsearch为0.92版,十分落后,以至于许多特性都和最新的版本不一致
#目的
- for open edx
- for my note system
- full-text search
#关键概念
index -> type -> document
类比数据库的话,我们可以认为
|
|
install
当然是使用docker,最为方便啦
|
|
#quick start 我们跟着这个案例走一遍:searching_data
案例中有用到_bulk
,关于_bulk
,参考这里:JSON Bulk import to Elasticstearch
我们来看一下原始数据(book_document.json)
|
|
交互工具使用httpie取代curl
导入数据
http POST :9200/_bulk < book_document.json
http http://localhost:9200/library/book/_count , 一共有4条数据
搜索
|
|
日常管理
- 列出所有index:/_cat/indices?v (http localhost:9200/_cat/indices?v)
- 而在0.92版本中则要使用/_status (http localhost:9200/_status),旧版的文档参考这里
用例
如果你在Open edX中启用课程/内容搜索功能,那么课程数据将被索引到elasticsearch里。目前这部分有一个问题,当课程被删除后索引还存在,如果不手动删除,用户还能检索出课程。这是个bug
我们先探索索引的结构
|
|
|
|
一些学习笔记
分析和分析器
标准化这些词为标准形式,提高它们的“可搜索性”或“查全率”
####标准分析器 标准分析器是Elasticsearch默认使用的分析器。对于文本分析,它对于任何语言都是最佳选择(译者注:就是没啥特殊需求,对于任何一个国家的语言,这个分析器就够用了) 它根据Unicode Consortium的定义的单词边界(word boundaries)来切分文本,然后去掉大部分标点符号。最后,把所有词转为小写
object嵌套的索引
Lucene 并不了解内部对象。 一个 Lucene 文件包含一个键-值对应的扁平表单。 为了让 Elasticsearch 可以有效的索引内部对象,将文件转换为扁平格式
例如:
|
|
关联内部对象可解决此类问题,我们称之为嵌套对象
映射和分析
映射(mapping)机制用于进行字段类型确认,将每个字段匹配为一种确定的数据类型(string, number, booleans, date等)。
#####查看映射 GET /edx_tracking_log/_mapping/logs
string类型字段默认值是analyzed,对于不允许全文索引的字段需要注明
|
|
周边
- awesome-elasticsearch
- 中文分词
- elasticsearch-rtf:elasticsearch中文发行版
- elasticsearch-dump
- elasticsearch-sql
- elasticsearch-dsl-py : High level Python client for Elasticsearch
- elasticsearch-py:Official Python low-level client for Elasticsearch.
- elastalert:找出elk中有问题的数据
- elasticsearch-gmail: use python
更多案例参考elastic/examples
#参考
文章作者 种瓜
上次更新 2016-04-16