@R星校长
Lucene 与 ElasticSearch 概述
Lucene 全文检索
Lucene 概述
Lucene 是一个全文搜索框架,而不是应用产品。因此它并不像http://www.baidu.com/ 或者 google Desktop 那么拿来就能用,它只是提供了一种工具让你能实现这些产品。
- lucene 能做什么 :
本质就是给搜索内容定位
要回答这个问题,先要了解lucene的本质。实际上lucene的功能很单一,说到底,就是你给它若干个字符串,然后它为你提供一个全文搜索服务,告诉你你要搜索的关键词出现在哪里。知道了这个本质,你就可以发挥想象做任何符合这个条件的事情了。你可以把站内新闻都索引了,做个资料库;你可以把一个数据库表的若干个字段索引起来,那就不用再担心因为 “%like%” 而锁表了;你也可以写个自己的搜索引擎…… - 你该不该选择 lucene
下面给出一些测试数据,如果你觉得可以接受,那么可以选择。
测试一:250万 记录,300M 左右文本,生成索引 380M 左右,800 线程下平均处理时间300ms。
测试二:37000 记录,索引数据库中的两个 varchar 字段,索引文件2.6M,800线程下平均处理时间 1.5ms。
倒排索引
正排索引
我是中国人(1)
中国是全球人口最多的国家,中国人也最多(2)
1: 我 , 是, 中国,中国人
2: 中国,是,全球….
倒排索引
1,我 (1:1){0}#第1行出现1次,在第一行中偏移量0
2,中国 (1:1) {2},(2:2){0,13}#第1行出现1次,偏移量2;第2行出现2次,偏移量0和13
文章数量和索引数量之间的关系?没关系!
document:java instance
ElasticSearch 概述
简介
漫画学 ElasticSearch
https://zhuanlan.zhihu.com/p/62892586
ElasticSearch 是一个基于 Lucene 的实时的分布式搜索和分析引擎。设计用于云计算中,能够达到近实时搜索,稳定,可靠,快速,安装使用方便。基于 RESTful 接口。
199x年的时候,搜索引擎很流行:yahoo/谷歌/百度。。。
道格·卡廷 Lucene 是一堆jar包,用于构建搜索引擎
nutch爬虫
solr 基于Lucene做的web项目,搜索引擎。
数据存储:HDFS
数据的随机存储:HBase
数据计算:MapReduce
普通请求是...get?a=1 GET|POST
rest请求....get/a/1 GET|POST|PUT|DELETE
Elasticsearch的用户
GitHub,Wikipedia,ebay等...
ELK
elasticsearch+logstash+kibana
ES 与 solr 的对比:
ElasticSearch vs Solr 总结
- es 基本是开箱即用,非常简单。Solr 安装比较复杂
- Solr 利用 Zookeeper 进行分布式管理,而 Elasticsearch 自身带有分布式协调管理功能。
- Solr 支持数据格式:JSON、XML、CSV,而 Elasticsearch 仅支持json文件格式。
- Solr 官方提供的功能更多,而 Elasticsearch 本身更注重于核心功能,高级功能多有第三方插件提供,例如图形化界面需要 kibana 友好支撑。
- Solr 查询快,但更新索引时慢(即插入删除慢),用于电商等查询多的应用;ES 建立索引快(即查询慢),即实时性查询快,用于 facebook、GitHub、新浪等搜索。
- Solr 是传统搜索应用的有力解决方案,但 Elasticsearch 更适用于新兴的大数据实时搜索应用。
ES与关系型数据对比
ES优点:
a) 分布式:ES 的自动发现机制会识别新增的节点并重新平衡分配数据。
b) 全文检索:ES 后台使用 Lucene 提供全文检索,自带多语言支持、强大的查询语言、地理位置支持、上下文感知的建议、自动完成和搜索片段
c) 近实时搜索和分析:数据从进入 ES 到能够搜索到是近实时的。除了搜索,ES 也可以进行聚合分析操作。
d) 高可用:ES 会自动发现新的或失败的节点,重组和重新平衡数据,确保数据是安全的和可访问的。
e) 模式自由:ES 的动态 Mapping 机制可以自动检测数据的结构和类型,创建索引,并使数据可搜索。
f) RESTful API:几乎任何操作都可以使用一个简单的 RESTful API,JSON 基于 HTTP 请求来实现,客户端也可以使用多种编程语言。
应用场景
a) 站内搜索:Facebook、新浪微博、论坛等的站内搜索
b) NoSQL 数据库:ES 读写性能优于 MongoDB,同时也支持地理位置查询
c) 日志分析:日志分析由实时日志分析平台 ELK 完成,能够对日志进行集中的收集、存储、搜索、分析、监控以及可视化。
环境安装与启动
注: Elasticsearch Kibana 的下载地址统一为
https://www.elastic.co/downloads/
问题排查可以登录https://discuss.elastic.co/c论坛查找相关信息
准备工作
- 环境准备
需要服务器 3 台:node2,node3,node4
切换快照到:JDK1.8、Zookeeper 安装、以及免密登录后的快照。 - 用户准备(三台机器上都要操作)
只允许普通用户操作,不允许 root 用户
注意:因为elasticsearch有远程执行脚本的功能所以容易中木马病毒,所以不允许用root用户启动,root用户是起不来的,赋权限,用一般的用户启动
要配置network.host才能别的机器或者网卡访问,否则只能是127.0.0.1或者localhost访问,这里配置成自己的局域网ip
注意配置yml结尾的配置文件都需要冒号后面加空格才行
创建esuser用户:
useradd esuser
设置密码
passwd esuser
让 esuser 拥有 sudo 的权限,需要修改 /etc/sudoers 文件
需要先给 /etc/sudoers 添加写的权限
[root@node2 ~]# ll /etc/sudoers
-r--r-----. 1 root root 4002 Mar 2 2012 /etc/sudoers
[root@node2 ~]# chmod u+w /etc/sudoers
[root@node2 ~]# vim /etc/sudoers
root ALL=(ALL) ALL
esuser ALL=(ALL) ALL
[root@node2 ~]# chmod u-w /etc/sudoers #改完之后将写权限删除
[root@node2 ~]# scp /etc/sudoers node3:/etc/
sudoers 100% 4024 3.9KB/s 00:00
[root@node2 ~]# scp /etc/sudoers node4:/etc/
sudoers 100% 4024 3.9KB/s 00:00
- 在 /opt 下创建目录 es,将 es 的所有权切换给 esuser
三台服务器上操作
[root@node2 ~]# su esuser
[esuser@node2 root]$ ll /root
ls: cannot open directory /root: Permission denied
[esuser@node2 root]$