Elasticsearch入门(一)
索引(index) —— 存储关联数据的地方。实际上,索引只是一个逻辑命名空间(logical namespace),它指向一个或多个分片(shards)。
分片(shard) 是 工作单元(worker unit) 底层的一员,分片是一个独立的Lucene实例既可,并且它自身也是一个完整的搜索引擎
,它只负责保存索引中所有数据的一小片。
分片分为 主分片(primary shard) 以及 从分片(replica shard) 两种。
在你的索引中,每一个文档都属于一个主分片,所以具体有多少主分片取决于你的索引能存储多少数据。
从分片只是主分片的一个副本,它用于提供数据的冗余副本,在硬件故障时提供数据保护,同时服务于搜索和检索这种只读请求。
索引中的主分片的数量在索引创建后就固定下来了,但是从分片的数量可以随时改变。
Client
对于JAVA,Elasticsearch 提供了两个客户端
节点客户端(Client Node)节点客户端以一个无数据的节点(node.master: false,node.data: false )的身份加入了一个集群,但是他知道什么数据在集群中的哪一个节点上,然后就可以请求转发到正确的节点上并进行连接。
传输客户端(Transport Client)传输客户端不加入集群本身,通过向远程集群发送请求来通讯。
这两个客户端都使用 Elasticsearch 的传输协议,通过9300端口与 java 客户端进行通信。集群中的各个节点也是通过9300端口进行通信。
其他的语言可以通过9200端口与 Elasticsearch 的 RESTful API 进行通信。
创建Client
Settings settings = Settings.settingsBuilder()
.put("cluster.name", "es-cluster").build();
Client client = TransportClient.builder().settings(settings).build()
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("10.9.22.35"), 9301))
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("10.9.22.35"), 9302))
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("10.9.22.35"), 9303));
Client Settings
cluster.name 集群名称,如果不为“elasticsearch” 需要在创建client时指定
client.transport.sniff 开启集群嗅探功能,探测集群中节点的添加与删除
client.transport.ignore_cluster_name 设置为true忽略连接的节点集群名称验证
client.transport.ping_timeout Ping一个节点响应超时时间 默认5s
client.transport.nodes_sampler_interval 多长时间间隔尝试ping和连接Node节点 默认5s
异常:
- not part of the cluster Cluster [elasticsearch], ignoring...
- org.elasticsearch.client.transport.NoNodeAvailableException: No node available
因为没有指定集群名称,指定后解决。
Index
你可能发现在 Elasticsearch 中,索引这个词汇已经被赋予了太多意义,所以在这里我们有必要澄清一下:
索引 (名词)
如上文所说,一个 索引 就类似于传统关系型数据库中的 数据库。这里就是存储相关文档的的地方。索引 (动词)
为一个文档创建索引 是把一个文档存储到一个索引(名词)中的过程,这样它才能被检索。这个过程非常类似于 SQL 中的 INSERT 命令,如果已经存在文档,新的文档将会覆盖旧的文档。反向索引
在关系数据库中的某列添加一个 索引,比如多路搜索树(B-Tree)索引,就可以加速数据的取回速度, Elasticsearch 以及 Lucene 使用的是一个叫做 反向索引(inverted index) 的结构来实现相同的功能。
Index Api 允许将一个Json文档索引到一个特定的索引中并可以搜索到
List<BcShop> list = new ArrayList<BcShop>();
list.add(new BcShop(1936212235,"鑫釜山铁桶海鲜烧烤(霄云路店)","霄云路15号","010-64388850",new Date()));
list.add(new BcShop(515636,"眉州东坡酒楼(中关村店)","中关村大街27号中关村大厦2层(地铁海淀黄庄站北)","010-59683322",new Date()));
list.add(new BcShop(19604619,"辣家私厨(百子湾店)","黄木厂路六号D座(今日美术馆对面)","010-87781377",new Date()));
list.add(new BcShop(22974252,"脑馋粉儿(三里屯店","三里屯SOHO商场5 B1-506(下沉广场直行150米左侧)","010-58494433",new Date()));
list.add(new BcShop(510689,"金百万烤鸭店(马甸店)","马甸裕民路3号(牡丹园)","010-62380012",new Date()));
list.add(new BcShop(512885,"味多美(广安门店)","广内大街白广路306号","010-63589375",new Date()));
for(BcShop bc :list){
IndexResponse response=client.prepareIndex("test_sale","test_shop").setSource(JSON.toJSONString(bc)).get();
if (response.isCreated()) {
System.out.println("创建成功!");
}
}
批量操作
List<BcShop> list= shopService.getList(10,1000);
BulkRequestBuilder bulkRequestBuilder = client.prepareBulk().setRefresh(true);
for (BcShop shop :list){
bulkRequestBuilder.add(client.prepareIndex("test_sale","test_shop")
.setSource(JSON.toJSONString(shop)));
}
bulkRequestBuilder.execute().actionGet();
Query
QueryBuilder builder = QueryBuilders.termQuery("shop_id", 1936212235);
SearchResponse response = client.prepareSearch("test_sale").setTypes("test_shop").setQuery(builder).get();
SearchHits hits = response.getHits();
if (hits.totalHits() > 0) {
for (SearchHit hit : hits) {
System.out.println("score:" + hit.getScore() + ":\t" + hit.getSource().get("shop_name"));
}
}
Elasticsearch入门(一)的更多相关文章
- ElasticSearch入门-搜索如此简单
搜索引擎我也不是很熟悉,但是数据库还是比较了解.可以把搜索理解为数据库的like功能的替代品.因为like有以下几点不足: 第一.like的效率不行,在使用like时,一般都用不到索引,除非使用前缀匹 ...
- ElasticSearch入门知识扫盲
ElasticSearch 入门介绍 tags: 第三方 lucene [toc] 1. what Elastic Search(ES)是什么 全文检索和lucene 全文检索 优点:高效,准确,分词 ...
- 《读书报告 -- Elasticsearch入门 》--简单使用(2)
<读书报告 – Elasticsearch入门 > ' 第四章 分布式文件存储 这章的主要内容是理解数据如何在分布式系统中存储. 4.1 路由文档到分片 创建一个新文档时,它是如何确定应该 ...
- 《读书报告 -- Elasticsearch入门 》-- 安装以及简单使用(1)
<读书报告 – Elasticsearch入门 > 第一章 Elasticsearch入门 Elasticsearch是一个实时的分布式搜索和分析引擎,使得人们可以在一定规模上和一定速度上 ...
- ElasticSearch入门 附.Net Core例子
1.什么是ElasticSearch? Elasticsearch是基于Lucene的搜索引擎.它提供了一个分布式,支持多租户的全文搜索引擎,它具有HTTP Web界面和无模式JSON文档. Elas ...
- ElasticSearch入门点滴
这是Elasticsearch-6.2.4 版本系列的第一篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 ...
- 全文搜索引擎Elasticsearch入门实践
全文搜索引擎Elasticsearch入门实践 感谢阮一峰的网络日志全文搜索引擎 Elasticsearch 入门教程 安装 首先需要依赖Java环境.Elasticsearch官网https://w ...
- Elasticsearch Elasticsearch入门指导
Elasticsearch入门指导 By:授客 QQ:1033553122 1. 开启elasticsearch服务器 1 2. 基本概念 2 <1> 集群(Cluster) 2 < ...
- ElasticSearch 入门
http://www.oschina.net/translate/elasticsearch-getting-started?cmp ElasticSearch 简单入门 返回原文英文原文:Getti ...
- 全文搜索引擎 Elasticsearch 入门
1. 百科 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,并作 ...
随机推荐
- Shell编程-05-Shell中条件测试与比较
目录 Shell脚本条件测试 Shell文件测试 Shell字符测试 Shell整数测试 Shell逻辑测试 Shell条件测试总结 Shell脚本条件测试 在Shell脚本中各种条件结构和流 ...
- SetFocus (GetDlgItem (hwnd, idFocus))函数的各参数的具体含义
Setfocus(HWMD hwnd):将窗口hwnd设置成获得焦点 GetDlgItem (hwnd, idFocus):此函数返回一个句柄 具体参数的含义: hwnd:包含该窗口标志位的对话框的句 ...
- hdu 2189 悼念512汶川大地震遇难同胞——来生一起走
题目 这道题用了,埃式筛选法和背包,我自己没有做出来,看了别人的代码,我也做不出来,特别是c[j]+=c[j-b[i]];弄了好久都没有弄懂. 这道题的解题思路:主要是先把150以内的所有素数找出来, ...
- Lucene原理一
Lucene 是一个高效的,基于Java 的全文检索库. 所以在了解Lucene之前要费一番工夫了解一下全文检索. 那么什么叫做全文检索呢?这要从我们生活中的数据说起. 我们生活中的数据总体分为两种: ...
- [svn] TortoisSVN的Blam功能
团队开发中,我们必须要面对多个人对同一个文件进行修改的情况. 多人修改同一文件,往往就会发生很多的问题,或者随着文件中代码的数量不断增加.当我们必须要使用文件中的其他人写的代码,或者代码发生bug之后 ...
- DelphiXE10.2怎么安装文本转语音(TTS)语音转文本(SR)控件(XE10.2+WIN764)
关资料: http://edn.embarcadero.com/article/29583 http://blog.sina.com.cn/s/blog_53866d7501017r1o.html 问 ...
- asp.net—策略模式
一.什么是策略模式 定义:定义一系列算法,把一个个算法封装成独立类并实现同一个接口,使得它们之间可以相互替换. 二.怎么使用策略模式 首先模拟一个场景:有一个用户想买车. 可以有多种方式买车: (1 ...
- Redis入门教程(C#)
Redis是什么? Redis是一个开源的.使用C语言编写的.支持网络交互的.可基于内存也可持久化的Key-Value数据库. 补充概念: 持久化:是将程序数据在持久状态和瞬时状态间转换的机制.通俗的 ...
- 适合新手看的ref和out
面试的时候一般很高的概率会问到ref和out的区别...我们死记硬背的话很难记住. 建议大家和我一样简单的探索一下.动手试一下就能记住了. 共同点是我们在使用ref或者out的时候一定要在写的方法里面 ...
- [翻译].NET Core 3 Preview1和Windows桌面框架开源
原文来自TechViews 今天,我们宣布推出.NET Core 3 Preview 1.这是.NET Core 3的第一个公开发布.我们有一些令人兴奋的新功能可供分享,并希望得到您的反馈.您可以使用 ...