IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 记录一下ElasticSearch结合springboot的使用 -> 正文阅读

[大数据]记录一下ElasticSearch结合springboot的使用

这里主要使用到两个东西,EelasticSearch和Elasticsearch-head
elasticsearch下载地址:https://www.elastic.co/cn/elasticsearch/
简单说一下es-head如何使用https://github.com/mobz/elasticsearch-head 下载后解压,进入到目录,npm install,npm run start 出现一下结果即代表运行成功,访问localhost:9100
在这里插入图片描述
在这里插入图片描述
开始使用

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>
@Configuration
public class ElasticSearchConfig {
    @Bean
    public RestHighLevelClient restHighLevelClient() {
        RestHighLevelClient restHighLevelClient = new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost("localhost", 9200, "http")
                )
        );
        return restHighLevelClient;
    }
}

1、创建索引

//创建索引
CreateIndexRequest createIndexRequest = new CreateIndexRequest("receive");
CreateIndexResponse create = esClient.indices().create(createIndexRequest, RequestOptions.DEFAULT);
boolean acknowledged = create.isAcknowledged();
System.err.println(acknowledged);

在这里插入图片描述
2、索引是否存在

GetIndexRequest getIndexRequest = new GetIndexRequest("receive");
boolean exists = esClient.indices().exists(getIndexRequest, RequestOptions.DEFAULT);
System.err.println(exists);

3、删除索引

DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest("receive");
AcknowledgedResponse delete = esClient.indices().delete(deleteIndexRequest, RequestOptions.DEFAULT);
System.err.println(delete.isAcknowledged());

4、索引新增文档

IndexRequest indexRequest = new IndexRequest("receive");//指定索引
indexRequest.id("1");//
Content content = new Content(1, "一个名字而已", 10, "没有什么好说的");
indexRequest.source(JSON.toJSONString(content), XContentType.JSON);
IndexResponse response = esClient.index(indexRequest, RequestOptions.DEFAULT);

在这里插入图片描述
5、查询某文档是否存在

GetRequest getRequest = new GetRequest("receive","1");
boolean exists = esClient.exists(getRequest, RequestOptions.DEFAULT);
System.err.println(exists);

6、查询文档内容

GetRequest getRequest = new GetRequest("receive","1");
GetResponse getResponse = esClient.get(getRequest, RequestOptions.DEFAULT);
System.err.println(getResponse.getSourceAsString());

在这里插入图片描述
7、删除指定文档

DeleteRequest deleteRequest = new DeleteRequest("receive", "1");
DeleteResponse delete = esClient.delete(deleteRequest, RequestOptions.DEFAULT);
System.err.println(delete.status());

8、批量创建索引

List<Receive> list = receiveMapper.selectAll();
		boolean exists = restHighLevelClient.indices().exists(new GetIndexRequest("receive"), RequestOptions.DEFAULT);
		if(exists) {
			restHighLevelClient.indices().delete(new DeleteIndexRequest("receive"), RequestOptions.DEFAULT);
		}
		BulkRequest bulkRequest = new BulkRequest();
        bulkRequest.timeout("30s");
        for (int i = 0; i < list.size(); i++) {
            bulkRequest.add(
                    new IndexRequest("receive")
                            .id(list.get(i).getId()+"")
                            .source(JSON.toJSONString(list.get(i)), XContentType.JSON)
            );
        }
        BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
        boolean hasFailures = bulk.hasFailures();
        if(hasFailures) {
        	return Result.fail("添加索引失败");
        }else {
        	return Result.ok("添加索引成功");
        }

在这里插入图片描述
9、查询演示


@PostMapping("/listData")
	public Result listData(@RequestBody Receive receive) throws IOException {
		SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
		BoolQueryBuilder boolBuilder = QueryBuilders.boolQuery();
		//MultiMatchQueryBuilder multiMatchQuery = QueryBuilders.multiMatchQuery("vue光头", "title", "descs");//匹配多字段
		if(!StringUtils.isEmpty(receive.getTm())) {
			MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("tm", receive.getTm());
			boolBuilder.must(matchQueryBuilder);//条件查询
		}
		if(!StringUtils.isEmpty(receive.getDh())) {
			MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("dh", receive.getDh());
			boolBuilder.must(matchQueryBuilder);//条件查询
		}
		if(!StringUtils.isEmpty(receive.getWh())) {
			TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("wh", receive.getWh());
			boolBuilder.must(termQueryBuilder);//条件查询
		}
		if(!StringUtils.isEmpty(receive.getZrz())) {
			MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("zrz", receive.getZrz());
			boolBuilder.must(matchQueryBuilder);//条件查询
		}
		RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("id");//范围查询
		rangeQueryBuilder.gte(15);
	    rangeQueryBuilder.lte(30); 
	    //boolBuilder.must(rangeQueryBuilder);
		//boolBuilder.filter(QueryBuilders.rangeQuery("id").from(200).to(8390));//过滤
		sourceBuilder.query(boolBuilder);
		sourceBuilder.from((receive.getPageNum()-1)*receive.getPageSize());
		sourceBuilder.size(receive.getPageSize());
		//sourceBuilder.sort(SortBuilders.fieldSort("id").order(SortOrder.ASC));//字段排序
		sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS)); //查询时间
		HighlightBuilder highlightBuilder = new HighlightBuilder();
        highlightBuilder.field("tm");
        highlightBuilder.field("dh");
        highlightBuilder.field("zrz");
        highlightBuilder.requireFieldMatch(false);
        highlightBuilder.preTags("<span style = 'color:red'>");
        highlightBuilder.postTags("</span>");
        sourceBuilder.highlighter(highlightBuilder);
		
		SearchRequest searchRequest = new SearchRequest("receive");
		searchRequest.source(sourceBuilder);
		SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
		SearchHit[] hits = search.getHits().getHits();
		
		List<Map<String,Object>> listMap = new ArrayList<>();
		for(SearchHit hit:hits) {
			Map<String, HighlightField> highlightFields = hit.getHighlightFields();
            HighlightField tm = highlightFields.get("tm");
            HighlightField dh = highlightFields.get("dh");
            HighlightField zrz = highlightFields.get("zrz");
            Map<String, Object> sourceAsMap = hit.getSourceAsMap();
            //解析高亮字段 ,将原来的字段换成高亮字段显示
            if(tm!=null){
                Text[] fragments = tm.fragments();
                String newTm = "";
                for (Text fragment : fragments) {
                	newTm+=fragment;
                }
                //高亮字段替换原来内容
                sourceAsMap.put("tm",newTm);
            }
            if(dh!=null){
                Text[] fragments = dh.fragments();
                String newDh = "";
                for (Text fragment : fragments) {
                	newDh+=fragment;
                }
                //高亮字段替换原来内容
                sourceAsMap.put("dh",newDh);
            }
            if(zrz!=null){
                Text[] fragments = zrz.fragments();
                String newZrz = "";
                for (Text fragment : fragments) {
                	newZrz+=fragment;
                }
                //高亮字段替换原来内容
                sourceAsMap.put("zrz",newZrz);
            }
            listMap.add(sourceAsMap);
		}
		
		Map<String,Object> map = new HashMap<>();
		map.put("total", search.getHits().getTotalHits().value);
		map.put("data", listMap);
		return Result.ok(map);
	}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
基本的使用就是这样,更多复杂的操作,可以自行研究。
贴心的把相关导包附上

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;

import org.apache.http.HttpHost;
import org.apache.lucene.search.TotalHits;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.support.master.AcknowledgedResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.client.indices.GetIndexResponse;
import org.elasticsearch.cluster.metadata.AliasMetaData;
import org.elasticsearch.common.text.Text;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.MatchQueryBuilder;
import org.elasticsearch.index.query.MultiMatchQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.RangeQueryBuilder;
import org.elasticsearch.index.query.TermQueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
import org.elasticsearch.search.sort.FieldSortBuilder;
import org.elasticsearch.search.sort.ScoreSortBuilder;
import org.elasticsearch.search.sort.SortBuilders;
import org.elasticsearch.search.sort.SortOrder;

import com.alibaba.fastjson.JSON;
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-06 09:53:50  更:2021-08-06 09:56:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 15:32:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码