- 为什么我们要使用ElasticSearch?
虽然在搜索领域 lucene可以被认为迄今为止最先进、性能最好的、功能最全的搜索引擎库。
但是,Lucene只是一个库。想要使用它,你必须使用Java来作为开发语言并将其直接集成到你的应用中,更糟糕的是,Lucene的配置及使用非常复杂,你需要深入了解检索的相关知识来理解它是如何工作的。
实际项目中:我们建立一个网站或应用程序,并要添加搜索功能,令我们受打击的是:搜索工作是很难的。我们希望我们的搜索解决方案要快,我们希望有一个零配置和一个完全免费的搜索模式,我们希望能够简单地使用JSON/XML通过HTTP的索引数据,我们希望我们的搜索服务器始终可用,我们希望能够从一台开始并在需要扩容时方便地扩展到数百,我们要实时搜索,我们要简单的多租户,我们希望建立一个云的解决方案、ElasticSearch就能为我们解决这些难题。 - ElasticSearch:
<1>优化了lucene的调用方式、实现了高可用分布式集群搜索方案 ,但是索引库管理依然是基于lucene的开源索引库
<2>分布式的实时文件存储 每个字段都被索引并可被索引。
<3>分布式的实时分析搜索引擎
<4>可以扩展到上百台服务器,处理pb级结构化或非结构化数据
<5>上手很简单,有开瓶即饮的效果 - ElasticSearch的交互方式:
<1>基于restful api
这里拓展一下Restful:Restful是一种面向资源架构的风格,使用URL定位资源,用http动词描述操作(get,post,delete,put)描述操作。
es和所有客户端的交互都是使用json格式的数据,
<2>curl命令方式
<3>java api - es为java提供了两内置客户端
<1>节点客户端:
以无数据节点身份加入集群,换言之,它自己不会存储数据,但是它知道数据在集群中的位置,能够直接转发请求到对应的节点上。
<2>传输客户端:
这个更加轻量级的传输客户端能够发送请求到远程集群,它自己是不加入集群的,只是简单转发请求给集群中的节点。 - es数据管理
什么是es中的文档
es是面向文档的,这就意味着它可以存储整个对象或者文档。
ES使用Javascript对象符号(JavaScript Object Notation),也就是JSON,作为文档序列化格式。JSON现在已经被大多语言所支持,而且已经成为NoSQL领域的标准格式。
ES存储的一个员工文档的格式示例:
{
_index : “crm”,
_type : “user”,
_id : 1,
_source : {
“email”: "nxh@itsource.cn",
“name”: “倪先华”,
“info”: {
“addr”: “四川省成都市”,
“age”: 30,
“interests”: [ “美食”, “美女” ]
},
“join_date”: “2016-06-01”
}
}
一个文档不只有数据,它还包含元数据,三个必须的元数据节点是:
_index:索引库,类似于关系型数据库里的“数据库”—它是我们存储和索引关联数据的地方。
_type:在应用中,我们使用对象表示一些“事物”,例如一个用户、一篇博客、一个评论,或者一封邮件。可以是大写或小写,不能包含下划线或逗号。我们将使用 employee 做为类型名。
_id:与 _index 和 _type 组合时,就可以在ELasticsearch中唯一标识一个文档。当创建一个文档,你可以自定义 _id ,也可以让Elasticsearch帮你自动生成。
另外还包括:_uid文档唯一标识(_type#_id)
_source:文档原始数据
_all:所有字段的连接字符串
**ElasticSearch**
最新推荐文章于 2024-04-27 00:51:17 发布