java往elasticsearch(ES)中写入数据
来源:互联网 发布:直接消耗系数矩阵 编辑:程序博客网 时间:2024/06/05 15:25
elasticsearch(ES)好处如下:
Elasticsearch不仅仅是Lucene和全文搜索,我们还能这样去描述它:
- 分布式的实时文件存储,每个字段都被索引并可被搜索
- 分布式的实时分析搜索引擎
- 可以扩展到上百台服务器,处理PB级结构化或非结构化数据
那么怎么使用ES呢,
首先你要了解ES,这个是ES特别好的中文版教程:ES中文版教程
一,ES的基本知识
大家都知道,mysql数据库可以分为:数据库(database) ->表(table) -> 行(row)->列(column),这样就可以唯一的记录一个数据了
同样为了方便查询,ES也分为:索引(index)->类型(type)->文档(document)->字段(field)
具体的对应规则如下:
Relational DB -> Database-> Table -> Row -> ColumnElasticsearch -> Index -> Type -> Document-> Field
往mysql中写数据之前,需要创建表(table),同样在ES里也需要创建表,不过在ES里叫做创建mapping(映射),关于创建mapping的具体内容大家可以看es的中文文档,
下面给出一个mapping 的例子,大家可以一窥究竟
"soft_list": {//index的名称 "mappings": { "soft": {//type的名称 "_ttl": { "enabled": false }, "dynamic": "false", "_all": { "enabled": false }, "properties": { "detailPageUrl": {//具体字段,即field "analyzer": "ik", "type": "string"//字段类型 }, "softwareName": { "analyzer": "ik",//分词类型 "type": "string" }, "companyName": { "analyzer": "ik", "type": "string" }, "downloadUrl": { "analyzer": "ik", "type": "string" }, "id": { "type": "integer" }, "softwareSize": { "analyzer": "ik", "type": "string" }, "payOrFree": { "analyzer": "ik", "type": "string" }, "softwareVer": { "analyzer": "ik", "type": "string" } } } } }至此,整个准备工作已经完成,接下来就要用java往ES里写入数据
二,写入数据
1,第一步需要创建和ES中mapping中字段一样的javaBean,这一步和mysql中写入数据一样,
/** * @author 李光光(编码小王子) * @date 2017年9月1日 下午2:35:07 * @version 1.0 */public class SoftwareInfoEs {private String companyName;//公司名称private Integer id;//相当于idprivate String softwareName;//软件名private String downloadUrl;//下载地址private String detailPageUrl;//软件详情页地址private String softwareSize;//软件大小private String softwareVer;//软件大小private String payOrFree;//是否免费private String score;//查询出来的得分//set,get方法}2,创建写入ES的接口EsJavaClient
public interface EsJavaClient { <T> void put(T object,Class<T> klass); }
3,EsJavaClient的实现类如下:
import java.net.InetSocketAddress;import java.util.Map;import java.util.concurrent.ExecutionException;import org.elasticsearch.action.ActionFuture;import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsRequest;import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsResponse;import org.elasticsearch.action.delete.DeleteRequest;import org.elasticsearch.action.index.IndexRequest;import org.elasticsearch.action.index.IndexResponse;import org.elasticsearch.client.Client;import org.elasticsearch.client.transport.TransportClient;import org.elasticsearch.common.settings.Settings;import org.elasticsearch.common.transport.InetSocketTransportAddress;import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class EsJavaClientImpl implements EsJavaClient { private final Logger logger = (Logger) LoggerFactory.getLogger(getClass()); private Client client; private String serverName;//es服务器地址 private int port;//es服务器端口 private String clusterName;//es服务器名称 private volatile Map<String, Pair<String, String>> indexInfos;@Override public <T> void put(T object,Class<T> klass) { String index = getIndex(klass); String type = getType(klass); try { ObjectMapper mapper = new ObjectMapper(); String jsonStr = mapper.writeValueAsString(object); ActionFuture<IndexResponse> future = client.index(new IndexRequest(index, type).source(jsonStr)); IndexResponse response = future.get();//此处会阻塞 logger.info(response.getId()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); }catch(Exception e){ e.printStackTrace(); } }//获取注入的参数 public void setIndexInfos(Map<String, Pair<String, String>> indexInfos) { this.indexInfos = indexInfos; } public Map<String, Pair<String, String>> getIndexInfos(){ return this.indexInfos; } //获取index private String getIndex(Class klass){ return indexInfos.get(klass.getName()).fst; } //获取type private String getType(Class klass) { return indexInfos.get(klass.getName()).snd; } //set,get方法 public Client getClient() { return client; } public void setClient(Client client) { this.client = client; } public String getServerName() { return serverName; } public void setServerName(String serverName) { this.serverName = serverName; } public int getPort() { return port; } public void setPort(int port) { this.port = port; } public String getClusterName() { return clusterName; } public void setClusterName(String clusterName) { this.clusterName = clusterName; }}
3,配置ES的service_bean.xml文件
<bean id="SoftwareInfoIndexType" class="com.sun.tools.javac.util.Pair"> <constructor-arg><value>你的index</value></constructor-arg> <constructor-arg><value>你的type</value></constructor-arg> </bean> <bean id="esJavaClient" class="com.server.web.service.es.EsJavaClientImpl" init-method="initClient"> <property name="serverName" value="${esclient.serverName}"></property> <property name="port" value="${esclient.port}"></property> <property name="clusterName" value="${esclient.clusterName}"></property> <property name="indexInfos"> <map> <entry key="com.server.web.domain.SoftwareInfoEs" value-ref="SoftwareInfoIndexType"></entry> </map> </property> </bean>
这样就可以写入到ES了,接下来会陆续更新,怎么从ES查询数据,修改ES中的数据等操作
阅读全文
0 0
- java往elasticsearch(ES)中写入数据
- hive 数据写入es
- ES-MongoDB学习3_MongoDB数据同步到Elasticsearch中
- SpringBoot -- ES从mysql中获取数据/Elasticsearch-jdbc
- hive数据直接写入到es索引中
- elasticsearch java api使用,es java封装
- 利用hive将数据写入es
- 往sdcard中写入数据
- ES elasticsearch
- Elasticsearch笔记五之java操作es
- Elasticsearch笔记五之java操作es
- Java把double数据写入文件中
- Java把double数据写入文件中
- elasticsearch写入数据存储的过程
- Spark Streaming 读取Kafka数据写入Elasticsearch
- elasticsearch 学习博客系列<三> ES 中 index-doc 的 添加(java)
- elasticsearch 学习博客系列<四> ES 中 index-doc 的 删除(java)
- elasticsearch 学习博客系列<五> ES 中 index-doc 的 更新(java)
- Spring-mvc运行原理
- 使用Maven构建多模块项目
- Spark Java sortByKey二次排序及Task not serializable异常
- 导入数据库时报错1067 – Invalid default value for ‘字段名’
- java包资源路径
- java往elasticsearch(ES)中写入数据
- 利用matlab进行简单的贝叶斯网络构建
- springcloud
- 基于ajax+php+mysql数据库实现用户注册登录
- hive中order by,sort by, distribute by, cluster by作用以及用法
- 微信小程序--单选复选按钮组的实现
- 4.3(4)
- Hadoop的计算框架——shuffle流程药店
- A Multi-View Deep Learning Approach for Cross Domain User Modeling in Recommendation Systems