首页 > 其他分享 >ES008-Elasticsearch+hbase整合

ES008-Elasticsearch+hbase整合

时间:2023-03-11 11:06:47浏览次数:39  
标签:String ES008 builder put Elasticsearch new hBaseUtils article hbase


1:设计索引库的settings信息的mappings信息,并把这些配置信息保存到一个配置文件中。


1.1 vi articles.json




{
"settings":{
"number_of_shards":3,
"number_of_replicas":1
},
"mappings":{
"article":{
"dynamic":"strict",
"properties":{
"id":{"type":"integer","store":"yes"},
"title":{"type":"string","store":"yes","index":"analyzed","analyzer":" ik"},
"describe":{"type":"string","store":"yes","index":"analyzed","analyzer":" ik"},
"author":{"type":"string","store":"yes","index":"no"}
}
}
}
}




其中: dynamic:strict  表示禁用ElasticSearch动态匹配字段类型,title和describe使用  ik 分词


1.2 命令行创建索引


curl -XPUT 'localhost:9200/articles/' -d'{"settings":{"number_of_shards":3,"number_of_replicas":1}}'




2:安装配置  es 服务。


    1):整合IK中文分词工具


    


3:启动  es




4:创建索引库


    使用开始定义的文件进行创建,使用下面命令进行创建


curl -XPOST ' localhost:9200/articles' -d @articles.json



5:初始化数据



ES008-Elasticsearch+hbase整合_字段



把原始数据在  es 中建立索引,并且还要在  hbase 中保存一份。


需要使用提供的代码里面的一个类(DataImportHBaseAndIndex.java)


public class DataImportHBaseAndIndex {

public static final String FILE_PATH= "D:/bigdata/es_hbase/datasrc/article.txt" ;
public static void main(String[] args) throws java.lang.Exception {
// 读取数据源
InputStream in = new FileInputStream(new File(FILE_PATH ));
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in ,"UTF-8" ));
String line = null;
List<Article> articleList = new ArrayList<Article>();
Article article = null;
while ((line = bufferedReader .readLine()) != null) {
String[] split = StringUtils.split(line, "\t");
article = new Article();
article.setId( new Integer(split [0]));
article.setTitle( split[1]);
article.setAuthor( split[2]);
article.setDescribe( split[3]);
article.setContent( split[3]);
articleList.add(article );
}

for (Article a : articleList ) {
// HBase插入数据
HBaseUtils hBaseUtils = new HBaseUtils();
hBaseUtils.put(hBaseUtils .TABLE_NAME , String.valueOf(a.getId()), hBaseUtils.COLUMNFAMILY_1 ,
hBaseUtils.COLUMNFAMILY_1_TITLE , a .getTitle());
hBaseUtils.put(hBaseUtils .TABLE_NAME , String.valueOf(a.getId()), hBaseUtils.COLUMNFAMILY_1 ,
hBaseUtils.COLUMNFAMILY_1_AUTHOR , a.getAuthor());
hBaseUtils.put(hBaseUtils .TABLE_NAME , String.valueOf(a.getId()), hBaseUtils.COLUMNFAMILY_1 ,
hBaseUtils.COLUMNFAMILY_1_DESCRIBE , a.getDescribe());
hBaseUtils.put(hBaseUtils .TABLE_NAME , String.valueOf(a.getId()), hBaseUtils.COLUMNFAMILY_1 ,
hBaseUtils.COLUMNFAMILY_1_CONTENT , a.getContent());

// ElasticSearch 插入数据
EsUtil. addIndex(EsUtil.DEFAULT_INDEX, EsUtil.DEFAULT_TYPE , a );
}
}
}



注意:


(1)使用  hbaseutils 工具类的时候,要注意修改  zk 的IP地址和hbase.rootdir的地址


还需要在集群中创建一个表(HBase集群):

create 'article','info'



(2) 使用  es 工具类的时候要注意: addIndex方法需要实现


/**
* 向ElasticSearch添加索引
*
* @param index
* 索引库名称
* @param type
* 搜索类型
* @param article
* 数据
* @return 当前doc的id
*/
public static String addIndex(String index , String type, Article article ) {

HashMap<String, Object> hashMap = new HashMap<String, Object>();
hashMap.put( "id", article .getId());
hashMap.put( "title", article .getTitle());
hashMap.put( "describe", article.getDescribe());
hashMap.put( "author", article .getAuthor());
IndexResponse response = getInstance().prepareIndex(index, type, String.valueOf(article.getId())).setSource( hashMap).get();
return response .getId();
}


     


6: Es 工具类中的search方法是否已经完善。


     

/**
* ElasticSearch查询
*
* @param skey
* 搜索关键字
* @param index
* 索引库
* @param type
* 类型
* @param start
* 开始下标
* @param row
* 每页显示最大记录书
* @return 数据记录
*/
public static Map<String, Object> search(String skey, String index , String type, Integer start, Integer row) {

HashMap<String, Object> dataMap = new HashMap<String, Object>();
ArrayList<Map<String, Object>> dataList = new ArrayList<Map<String, Object>>();

SearchRequestBuilder builder = EsUtil.getInstance().prepareSearch(index);
builder.setTypes( type);
builder.setSearchType(SearchType. DFS_QUERY_THEN_FETCH);
if (StringUtils.isNotBlank( skey)) {
builder.setQuery(QueryBuilders. multiMatchQuery(skey, "title", "describe" ));// 匹配title和describe两个字段
}
builder.setFrom( start);
builder.setSize( row);

// 设置查询高亮显示
builder.addHighlightedField( "title");
builder.addHighlightedField( "describe");
builder.setHighlighterPreTags( "<font color='red'>");
builder.setHighlighterPostTags( "</font>");

SearchResponse response = builder.get(); // 执行查询
SearchHits hits = response.getHits();
long totalCount = hits .getTotalHits();// 总数
SearchHit[] hits2 = hits.getHits();
Map<String, Object> source = null;
for (SearchHit searchHit : hits2 ) {
source = searchHit.getSource();// 获取查询数据
// 查询字段title和 describle高亮控制
Map<String, HighlightField> highlightFields = searchHit .getHighlightFields();

HighlightField highlightFieldTile = highlightFields.get("title" );
if (highlightFieldTile != null) {
Text[] fragments = highlightFieldTile.getFragments();
String name = "";
for (Text text : fragments ) {
name += text;
}
source.put( "title", name );// 设置title高亮字段
}
HighlightField highlightFieldDescribe = highlightFields.get("describe" );
if (highlightFieldDescribe != null) {
Text[] fragments = highlightFieldDescribe.getFragments();
String name = "";
for (Text text : fragments ) {
name += text;
}
source.put( "describe", name ); // 设置describe高亮字段
}

dataList.add( source);
}
dataMap.put( "count", totalCount );
dataMap.put( "dataList", dataList );
return dataMap ;
}





7:下面就可以使用  jetty 进行启动。


    如何安装  jetty


         参考:http://eclipse-jetty.github.io/installation.html


8:访问:http://localhost:8080/article


   


    


9:如果使用  tomcat 启动这个项目


    注意:  jdk 使用1.7     tomcat 使用7.0

标签:String,ES008,builder,put,Elasticsearch,new,hBaseUtils,article,hbase
From: https://blog.51cto.com/u_14361901/6114256

相关文章

  • ES007-Elasticsearch中文分词集成
    1、elasticsearch官方只提供smartcn这个中文分词插件,效果不是很好2、引入分词器前命令行下测试curl'http://localhost:9200/jf/_analyze?pretty=true'-d'{......
  • SpringBoot整合ElasticSearch
    ElasticSearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载......
  • ElasticSearch 实现分词全文检索 - 测试数据准备
    目录ElasticSearch实现分词全文检索-概述ElasticSearch实现分词全文检索-ES、Kibana、IK安装ElasticSearch实现分词全文检索-Restful基本操作ElasticSearch......
  • Elasticsearch
     ES是基于索引的设计,它没办法像MySQL那样使用join查询,所以,查询数据时我们需要把每条主数据及关联子表的数据全部整合在一条记录中。ES的存储结构  无结构文档......
  • 什么是HBase
    HbaseHBase即HadoopDatabase,是高可靠、高性能,面向列、可伸缩的分布式存储系统,利用HBase可以对大表数据的读、写达到实时级别。面向列是指的是面向列检索,表的结构与mysql......
  • ElasticSearch 实现分词全文检索 - Java SpringBoot ES 索引操作
    目录ElasticSearch实现分词全文检索-概述ElasticSearch实现分词全文检索-ES、Kibana、IK安装ElasticSearch实现分词全文检索-Restful基本操作ElasticSearch......
  • ElasticSearch 实现分词全文检索 - Restful基本操作
    Restful语法GET请求:http://ip:port/index:查询索引信息http://ip;port/index/type/doc_id:查询指定的文档信息POST请求:http://ip;port/index/type/_search:......
  • ElasticSearch 实现分词全文检索 - 概述
    需求做一个类似百度的全文搜索功能所用的技术如下:ElasticSearchKibana管理界面IKAnalysis分词器SpringBootElasticSearch简介ES是一个使用Java语言并且基......
  • elasticsearch 排错总结
    控制台乱码修改elasticsearch-7.6.2\config下的jvm.options文件,在任意行上加上-Dfile.encoding=GBKIK报错但成功启动,按照网上的说法是jdk权限不足,修改方式是改变jdk权限......
  • HBase存储空间撑爆导致拒绝服务的问题解决思路与操作方法记录
    时间:2022年3月29日;问题:tmss数据源切换完成后,源表数据将HBase集群内节点的存储空间撑爆,导致HBase集群内节点拒绝服务;修复:查询HDFS占用空间情况:hdfsdfs-df-h;确认是否......