import com.yuepu.common.core.domain.BaseEntity;
import lombok.Data;import java.util.Date;
import java.util.Map;@Data
public class EsQuery extends BaseEntity {
//    实体设置参数样例
//    String[] fieldNames = new String[]{"title", "top_words"};
//    esQuery.setIndex("xiaohongshu_note_test");
//    esQuery.setAccountId(1);
//    esQuery.setContent("可口可乐");
//    esQuery.setSortField("publish_time");
//    esQuery.setStartPage(1);
//    esQuery.setPageSize(10);
//    esQuery.setFieldNames(fieldNames);
//    Page<Map<String, Object>> list = elasticsearchUtil.searchDataPage(esQuery);
//    esQuery.setBeginTime("2020-08-25");
//    esQuery.setEndTime("2021-08-25");//   index         索引private String index;//   accountId  账号id索引private Integer accountId;//   content  查询值private String content = "";//   笔记 排序字段private String sortField = "publish_time";//  笔记  排序 asc descprivate String sort = "desc";//   fieldNames  查询字段可以多字段查询private String[] fieldNames;//   笔记     开始页private int startPage;//   笔记      每页条数private int pageSize;//   开始时间private String beginTime;//   结束时间private String endTime;//   排除关键字private String exclude = "";// 平台idprivate String[] platformId;// 列表 页码private int page;// 列表 每条数量private int size;// 列表 排序字段private String listSortField = "";// 列表 排序private String listSort = "desc";
}

安装之前需满足的条件:jdk,node.js

第一步: 下载elasticsearch、分词器、还有kabana插件(我这里的版本使用的均为6.7.0版本的)

下载地址:https://pan.baidu.com/s/1KfDhymRLhSM8fHz7fTUmww

提取码:mr4n

解压:解压缩到对应的目录,如:D:\elasticsearch\elasticsearch-6.7.0

修改D:\elasticsearch\elasticsearch-6.7.0\config下的elasticsearch.yml配置文件

  启动:进入elasticsearch-6.7.0的bin目录,双击elasticsearch.bat启动服务,默认端口是9200,如下图

启动完成之后,在浏览器中访问http://localhost:9200/,出现如下图所示内容表明Elasticsearch启动成功:

第二步:在D:\elasticsearch\elasticsearch-6.7.0\plugins下新建ik文件夹,将对应版本的分词器解压到改文件夹下,如图:

第三步: 将kibana解压到D:\elasticsearch\elasticsearch-6.7.0下,如图:

双击 D:\elasticsearch\elasticsearch-6.7.0\kibana-6.7.0-windows-x86_64\bin下的kibana.bat启动(在此之前先启动elasticsearch,也就是文章中第一步中的启动),耐心稍等片刻,待出现下图:

  • 在窗口日志的最后,当看到一行提示信息[listening] Server running at http://localhost:5601,表明kibana已经成功启动,并且监听本机的5601端口

如何下载elasticsearch历史版本: 请参考该文章:https://jingyan.baidu.com/article/d7130635f5a27113fdf4753c.html

另外:如何下载历史版本的分词器:

地址:mirrors / medcl / elasticsearch-analysis-ik · CODE CHINA

点击页面中的tags

选择对应的版本:如6.7.0

如果展开的页面中没有你要找的版本,就next,知道找到你要下载的版本,然后选择zip下载:如图

kibana历史版本下载:Past Releases of Elastic Stack Software | Elastic

以下为查询展示示例

java中实现的方式

1、工具类

import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.TimeUnit;import com.alibaba.fastjson.JSONObject;
import com.yuepu.front.pojo.EsQuery;
import com.yuepu.front.pojo.Page;
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.nio.client.HttpAsyncClientBuilder;import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.HttpAsyncResponseConsumerFactory;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.core.CountRequest;
import org.elasticsearch.client.core.CountResponse;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.common.text.Text;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.Operator;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.reindex.DeleteByQueryRequest;
import org.elasticsearch.rest.RestStatus;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.aggregations.Aggregation;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.Aggregations;
import org.elasticsearch.search.aggregations.bucket.filter.Filters;
import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramInterval;
import org.elasticsearch.search.aggregations.bucket.histogram.ParsedDateHistogram;
import org.elasticsearch.search.aggregations.bucket.terms.StringTerms;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.aggregations.metrics.cardinality.ParsedCardinality;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.search.sort.SortOrder;
import org.joda.time.DateTime;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;import com.alibaba.fastjson.JSON;import lombok.extern.log4j.Log4j2;@Component
@Log4j2
public class ElasticsearchUtil {private static final RequestOptions COMMON_OPTIONS;@Value("${spring.elasticsearch.cluster_host}")private String cluster_host;@Value("${spring.elasticsearch.cluster_port}")private Integer cluster_port;@Value("${spring.elasticsearch.username}")private String username;@Value("${spring.elasticsearch.password}")private String password;private SimpleDateFormat  sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");static {RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder();// 默认缓存限制为100MB,此处修改为30MB。builder.setHttpAsyncResponseConsumerFactory(new HttpAsyncResponseConsumerFactory.HeapBufferedResponseConsumerFactory(100 * 1024 * 1024));COMMON_OPTIONS = builder.build();}public RestHighLevelClient getEsClient() {// 阿里云Elasticsearch集群需要basic auth验证。final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();//访问用户名和密码,创建阿里云Elasticsearch实例时设置的用户名和密码,也是Kibana控制台的登录用户名和密码。credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(this.username, this.password));// 通过builder创建rest client,配置http client的HttpClientConfigCallback。// 单击所创建的Elasticsearch实例ID,在基本信息页面获取公网地址,即为ES集群地址。RestClientBuilder builder = RestClient.builder(new HttpHost(this.cluster_host, this.cluster_port)).setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {@Overridepublic HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);}});// RestHighLevelClient实例通过REST low-level client builder进行构造。RestHighLevelClient highClient = new RestHighLevelClient(builder);return highClient;}/*** 创建索引** @param index* @throws IOException*/public void createIndex(String index) throws IOException {if (!existsIndex(index)) {CreateIndexRequest request = new CreateIndexRequest(index);CreateIndexResponse createIndexResponse = getEsClient().indices().create(request, COMMON_OPTIONS);System.out.println("createIndex: " + JSON.toJSONString(createIndexResponse));}}/*** 判断索引是否存在** @param index* @return* @throws IOException*/public boolean existsIndex(String index) throws IOException {GetIndexRequest request = new GetIndexRequest(index);boolean exists = getEsClient().indices().exists(request, COMMON_OPTIONS);System.out.println("existsIndex: " + exists);return exists;}/*** 根据条件删除数据** @param index   索引* @param builder 删除条件*/public void deleteByQuery(String index, QueryBuilder builder) {DeleteByQueryRequest request = new DeleteByQueryRequest(index);request.setQuery(builder);//设置此次删除的最大条数request.setBatchSize(1000);try {getEsClient().deleteByQuery(request, COMMON_OPTIONS);} catch (Exception e) {log.error("根据条件删除数据失败,index:{}", index);}}/*** 根据条件查询数据*/public Page<Map<String, Object>> searchDataPage(EsQuery esQuery) {SearchRequest request = new SearchRequest(esQuery.getIndex());request.types("_doc");QueryBuilder queryBuilder;SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();if (null != (esQuery.getBeginTime()) && null != (esQuery.getEndTime())) {queryBuilder = createQueryBuilder(esQuery.getContent(), esQuery.getAccountId(), esQuery.getExclude(), getTimestamp(esQuery.getBeginTime()), getTimestamp(esQuery.getEndTime()), esQuery.getFieldNames());} else {queryBuilder = createQueryBuilder(esQuery.getContent(), esQuery.getAccountId(), esQuery.getExclude(), esQuery.getFieldNames());}try {//加载查询条件sourceBuilder.query(queryBuilder);RestHighLevelClient highClient = getEsClient();long totalHits = searchDataPageCount(esQuery.getIndex(), sourceBuilder, highClient);if (null != (esQuery.getFieldNames()) ){HighlightBuilder highlightBuilder = createHighlightBuilder(esQuery.getFieldNames());if (!ObjectUtils.isEmpty(highlightBuilder)) {sourceBuilder.highlighter(highlightBuilder);}}//设置超时时间sourceBuilder.timeout(new TimeValue(30, TimeUnit.SECONDS));//设置是否按匹配度排序sourceBuilder.explain(true);if ("".equals(esQuery.getSortField())) {esQuery.setSortField("publish_time");}if ("asc".equals(esQuery.getSort())) {sourceBuilder.sort(esQuery.getSortField(), SortOrder.ASC);} else if ("desc".equals(esQuery.getSort())) {sourceBuilder.sort(esQuery.getSortField(), SortOrder.DESC);}request.source(sourceBuilder);//设置分页sourceBuilder.from((esQuery.getStartPage() - 1) * esQuery.getPageSize()).size(esQuery.getPageSize());log.info("查询返回条件:" + sourceBuilder.toString());SearchResponse searchResponse = highClient.search(request, COMMON_OPTIONS);//Long totalHits = searchResponse.getHits().toXContent(builder, params);log.info("共查出{}条记录", totalHits);RestStatus status = searchResponse.status();if (status.getStatus() == 200) {List<Map<String, Object>> sourceList = new ArrayList<>();for (SearchHit searchHit : searchResponse.getHits().getHits()) {Map<String, Object> map = new HashMap<>();Map<String, Object> sourceAsMap = searchHit.getSourceAsMap();sourceAsMap.put("publish_time", stampToDate(sourceAsMap.get("publish_time")));map.put("source", sourceAsMap);// 处理高亮数据Map<String, Object> hitMap = new HashMap<>();searchHit.getHighlightFields().forEach((k, v) -> {String hight = "";for (Text text : v.getFragments()) hight += text.string();hitMap.put(v.getName(), hight);});map.put("highlight", hitMap);sourceList.add(map);}Page<Map<String, Object>> page = new Page<Map<String, Object>>();page.setPageNo(esQuery.getStartPage());page.setPageNum((int) Math.ceil((int) totalHits / esQuery.getPageSize()));page.setPageSize(esQuery.getPageSize());page.setTotal((int) totalHits);page.setRows(sourceList);return page;}highClient.close();} catch (IOException e) {System.err.println(e.getMessage());log.error("条件查询索引{}时出错", esQuery.getIndex());}return null;}public static String stampToDate(Object o){SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");long lt = new Long(o.toString());Date date = new Date(lt);String res = simpleDateFormat.format(date);return res;}// 根据条件时间 去查询所有的作品 不分页public List<Map<String, Object>> searchData(EsQuery esQuery) {SearchRequest request = new SearchRequest(esQuery.getIndex());QueryBuilder queryBuilder;request.types("_doc");SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();if (null != (esQuery.getBeginTime()) && null != (esQuery.getEndTime())) {queryBuilder = createQueryBuilder(esQuery.getContent(), esQuery.getAccountId(), esQuery.getExclude(), getTimestamp(esQuery.getBeginTime()), getTimestamp(esQuery.getEndTime()), esQuery.getFieldNames());} else {queryBuilder = createQueryBuilder(esQuery.getContent(), esQuery.getAccountId(), esQuery.getExclude(), esQuery.getFieldNames());}try {//加载查询条件sourceBuilder.query(queryBuilder);RestHighLevelClient highClient = getEsClient();long totalHits = searchDataPageCount(esQuery.getIndex(), sourceBuilder, highClient);//设置超时时间sourceBuilder.timeout(new TimeValue(30, TimeUnit.SECONDS));//设置是否按匹配度排序sourceBuilder.explain(true);if ("".equals(esQuery.getSortField())) {esQuery.setSortField("publish_time");}if ("asc".equals(esQuery.getSort())) {sourceBuilder.sort(esQuery.getSortField(), SortOrder.ASC);} else if ("desc".equals(esQuery.getSort())) {sourceBuilder.sort(esQuery.getSortField(), SortOrder.DESC);}request.source(sourceBuilder);//设置查询所有sourceBuilder.from(1).size((int) totalHits);SearchResponse searchResponse = highClient.search(request, COMMON_OPTIONS);RestStatus status = searchResponse.status();if (status.getStatus() == 200) {List<Map<String, Object>> sourceList = new ArrayList<>();for (SearchHit searchHit : searchResponse.getHits().getHits()) {Map<String, Object> map = new HashMap<>();Map<String, Object> sourceAsMap = searchHit.getSourceAsMap();sourceAsMap.put("publish_time",sdf.format(sourceAsMap.get("publish_time")));map.put("source", sourceAsMap);sourceList.add(map);}return sourceList;}highClient.close();} catch (IOException e) {System.err.println(e.getMessage());}return null;}// 获取关键词keywordpublic List<Map<String, Object>> searchKeyWord(EsQuery esQuery) {SearchRequest request = new SearchRequest(esQuery.getIndex());QueryBuilder queryBuilder;request.types("_doc");SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();if (null != (esQuery.getBeginTime()) && null != (esQuery.getEndTime())) {queryBuilder = createQueryBuilder(esQuery.getContent(), esQuery.getAccountId(), esQuery.getExclude(), getTimestamp(esQuery.getBeginTime()), getTimestamp(esQuery.getEndTime()), esQuery.getFieldNames());} else {queryBuilder = createQueryBuilder(esQuery.getContent(), esQuery.getAccountId(), esQuery.getExclude(), esQuery.getFieldNames());}try {//加载查询条件sourceBuilder.query(queryBuilder);RestHighLevelClient highClient = getEsClient();long totalHits = searchDataPageCount("索引1,索引2,索引3,...", sourceBuilder, highClient);//设置超时时间sourceBuilder.timeout(new TimeValue(30, TimeUnit.SECONDS));//设置是否按匹配度排序sourceBuilder.explain(true);if ("".equals(esQuery.getSortField())) {esQuery.setSortField("publish_time");}if ("asc".equals(esQuery.getSort())) {sourceBuilder.sort(esQuery.getSortField(), SortOrder.ASC);} else if ("desc".equals(esQuery.getSort())) {sourceBuilder.sort(esQuery.getSortField(), SortOrder.DESC);}request.source(sourceBuilder);//设置查询所有sourceBuilder.from(1).size((int) totalHits);SearchResponse searchResponse = highClient.search(request, COMMON_OPTIONS);RestStatus status = searchResponse.status();if (status.getStatus() == 200) {List<Map<String, Object>> sourceList = new ArrayList<>();for (SearchHit searchHit : searchResponse.getHits().getHits()) {Map<String, Object> map = new HashMap<>();Map<String, Object> sourceAsMap = searchHit.getSourceAsMap();map.put("top_words", sourceAsMap.get("top_words"));sourceList.add(map);}return sourceList;}highClient.close();} catch (IOException e) {System.err.println(e.getMessage());}return null;}// 根据条件时间 去查询所有的作品 不分页public Map<String, Map> searchDatas(EsQuery esQuery) {SearchRequest request = new SearchRequest(esQuery.getIndex());RestHighLevelClient client = getEsClient();QueryBuilder queryBuilder;request.types("_doc");SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();if (null != (esQuery.getBeginTime()) && null != (esQuery.getEndTime())) {queryBuilder = createQueryBuilder(esQuery.getContent(), esQuery.getAccountId(), esQuery.getExclude(), getTimestamp(esQuery.getBeginTime()), getTimestamp(esQuery.getEndTime()), esQuery.getFieldNames());} else {queryBuilder = createQueryBuilder(esQuery.getContent(), esQuery.getAccountId(), esQuery.getExclude(), esQuery.getFieldNames());}try {//加载查询条件sourceBuilder.query(queryBuilder);//聚合函数sourceBuilder.aggregation(AggregationBuilders.dateHistogram("brandAgg").field("publish_time").dateHistogramInterval(DateHistogramInterval.DAY).format("yyyy-MM-dd").subAggregation(AggregationBuilders.cardinality("user_count").field("user_id")));//设置超时时间sourceBuilder.timeout(new TimeValue(30, TimeUnit.SECONDS));//设置是否按匹配度排序sourceBuilder.explain(true);if ("".equals(esQuery.getSortField())) {esQuery.setSortField("publish_time");}if ("asc".equals(esQuery.getSort())) {sourceBuilder.sort(esQuery.getSortField(), SortOrder.ASC);} else if ("desc".equals(esQuery.getSort())) {sourceBuilder.sort(esQuery.getSortField(), SortOrder.DESC);}//设置查询所有sourceBuilder.from(0);request.source(sourceBuilder);SearchResponse searchResponse = client.search(request, RequestOptions.DEFAULT);ParsedDateHistogram parsedDateHistogram = searchResponse.getAggregations().get("brandAgg");;List parsedBucketList = parsedDateHistogram.getBuckets();List<Map<String, Object>> sourceList = new ArrayList<>();RestStatus status = searchResponse.status();Map<String, Object> sourceAsMap = new HashMap<>();Map<String, Object> sourceAsMaps = new HashMap<>();Map<String, Map> map = new HashMap<>();if (status.getStatus() == 200) {for (Object bucket : parsedBucketList) {ParsedDateHistogram.ParsedBucket parsedBucket = (ParsedDateHistogram.ParsedBucket) bucket;ParsedCardinality cardinality = parsedBucket.getAggregations().get("user_count");sourceAsMap.put(parsedBucket.getKeyAsString(), parsedBucket.getDocCount());sourceAsMaps.put(parsedBucket.getKeyAsString(), cardinality.getValue());}map.put("sourceAsMap",sourceAsMap);map.put("sourceAsMaps",sourceAsMaps);return map;}client.close();} catch (IOException e) {System.err.println(e.getMessage());}return null;}//获取条件查询来的作品 accountIdpublic List searchDataId(EsQuery esQuery) {List idList = new ArrayList();SearchRequest request = new SearchRequest(esQuery.getIndex());RestHighLevelClient client = getEsClient();QueryBuilder queryBuilder;request.types("_doc");SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();if (null != (esQuery.getBeginTime()) && null != (esQuery.getEndTime())) {queryBuilder = createQueryBuilder(esQuery.getContent(), esQuery.getAccountId(), esQuery.getExclude(), getTimestamp(esQuery.getBeginTime()), getTimestamp(esQuery.getEndTime()), esQuery.getFieldNames());} else {queryBuilder = createQueryBuilder(esQuery.getContent(), esQuery.getAccountId(), esQuery.getExclude(), esQuery.getFieldNames());}try {//加载查询条件sourceBuilder.query(queryBuilder);//聚合函数sourceBuilder.aggregation(AggregationBuilders.terms("accountId").field("account_id").size(100000));//设置超时时间sourceBuilder.timeout(new TimeValue(30, TimeUnit.SECONDS));//设置是否按匹配度排序sourceBuilder.explain(true);if ("".equals(esQuery.getSortField())) {esQuery.setSortField("publish_time");}if ("asc".equals(esQuery.getSort())) {sourceBuilder.sort(esQuery.getSortField(), SortOrder.ASC);} else if ("desc".equals(esQuery.getSort())) {sourceBuilder.sort(esQuery.getSortField(), SortOrder.DESC);}request.source(sourceBuilder);//设置查询所有sourceBuilder.from(0);SearchResponse searchResponse = client.search(request, RequestOptions.DEFAULT);Aggregations aggregations = searchResponse.getAggregations();// 获取某个聚合Terms terms = aggregations.get("accountId");RestStatus status = searchResponse.status();if (status.getStatus() == 200) {// 获取桶for (Terms.Bucket bucket : terms.getBuckets()) {// 获取key,这里是accountIdidList.add(bucket.getKeyAsString());}return idList;}client.close();} catch (IOException e) {System.err.println(e.getMessage());}return null;}public long searchDataPageCount(String index, SearchSourceBuilder sourceBuilder, RestHighLevelClient highClient) {CountRequest countRequest = new CountRequest(index);countRequest.source(sourceBuilder);try {CountResponse response = highClient.count(countRequest, COMMON_OPTIONS);long length = response.getCount();return length;} catch (IOException e) {e.printStackTrace();}return 0;}/**1630398050066* 1630398054019* 构建高亮字段 进行 多字段模糊查询* 创建查询语句*/private QueryBuilder createQueryBuilder(String content, Integer accountId, String exclude, Long beginTime, Long endTime, String... fieldNames) {BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();//自定义条件(Operator.AND 表示匹配包含值)if (!"".equals(content)) {boolQueryBuilder.must(QueryBuilders.multiMatchQuery(content, fieldNames).operator(Operator.OR).minimumShouldMatch("50%"));}if (!"".equals(exclude)) {boolQueryBuilder.mustNot(QueryBuilders.multiMatchQuery(exclude, fieldNames).operator(Operator.OR).minimumShouldMatch("50%"));}if (null != accountId) {boolQueryBuilder.must(QueryBuilders.boolQuery().should(QueryBuilders.termQuery("account_id", accountId)));}boolQueryBuilder.must(QueryBuilders.boolQuery().should(QueryBuilders.rangeQuery("publish_time").from(beginTime).to(endTime)));return boolQueryBuilder;}private QueryBuilder createQueryBuilder(String content, Integer accountId, String exclude, String... fieldNames) {BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();//自定义条件(Operator.AND 表示匹配包含值)if (!"".equals(content)) {boolQueryBuilder.must(QueryBuilders.multiMatchQuery(content, fieldNames).operator(Operator.OR).minimumShouldMatch("50%"));}if (!"".equals(exclude)) {boolQueryBuilder.mustNot(QueryBuilders.multiMatchQuery(exclude, fieldNames).operator(Operator.OR).minimumShouldMatch("50%"));}if (null != accountId) {boolQueryBuilder.must(QueryBuilders.boolQuery().should(QueryBuilders.termQuery("account_id", accountId)));}return boolQueryBuilder;}/*** 构造高亮器** @auther: guangz* @date: 2019/8/26 10:42*/private HighlightBuilder createHighlightBuilder(String... fieldNames) {// 设置高亮,使用默认的highlighter高亮器HighlightBuilder highlightBuilder = new HighlightBuilder()// .field("productName").preTags("<span style='color:red'>").postTags("</span>");// 设置高亮字段for (String fieldName : fieldNames) {highlightBuilder.field(fieldName);}return highlightBuilder;}/*QueryBuilders.termQuery("key", obj) 完全匹配QueryBuilders.termsQuery("key", obj1, obj2..)   一次匹配多个值QueryBuilders.matchQuery("key", Obj) 单个匹配, field不支持通配符, 前缀具高级特性QueryBuilders.multiMatchQuery("text", "field1", "field2"..);  匹配多个字段, field有通配符忒行QueryBuilders.matchAllQuery();         匹配所有文件*//*** @param time* @desc 字符串转时间戳* @example time="2019-04-19 00:00:00"**/public Long getTimestamp(String time) {Long timestamp = null;try {timestamp = new SimpleDateFormat("yyyy-MM-dd").parse(time).getTime();} catch (ParseException e) {e.printStackTrace();}return timestamp;}
}

2、实体类


import com.yuepu.common.core.domain.BaseEntity;
import lombok.Data;@Data
public class EsQuery extends BaseEntity {
//    实体设置参数样例
//    String[] fieldNames = new String[]{"title", "top_words"};
//    esQuery.setIndex("xiaohongshu_note_test");
//    esQuery.setAccountId(1);
//    esQuery.setContent("可口可乐");
//    esQuery.setSortField("publish_time");
//    esQuery.setStartPage(1);
//    esQuery.setPageSize(10);
//    esQuery.setFieldNames(fieldNames);
//    Page<Map<String, Object>> list = elasticsearchUtil.searchDataPage(esQuery);
//    esQuery.setBeginTime("2020-08-25");
//    esQuery.setEndTime("2021-08-25");//   index         索引private String index;//   accountId  账号id索引private Integer accountId;//   content  查询值private String content = "";//   笔记 排序字段private String sortField = "publish_time";//  笔记  排序 asc descprivate String sort = "desc";//   fieldNames  查询字段可以多字段查询private String[] fieldNames;//   笔记     开始页private int startPage;//   笔记      每页条数private int pageSize;//   开始时间private String beginTime;//   结束时间private String endTime;//   排除关键字private String exclude = "";// 平台idprivate String[] platformId;// 列表 页码private int page;// 列表 每条数量private int size;// 列表 排序字段private String listSortField = "";// 列表 排序private String listSort = "desc";
}

controller类:

 /*** 账号原贴展示列表(排序可根据发布时间/互动量) 默认按发布时间* */@PreAuthorize("@ss.hasPermi('front:bili:note:es')")@PostMapping("/es")public AjaxResult es(@Validated EsQueryDto esQueryDto){logger.info("----------------- 账号原贴展示列表 start  -----------------");logger.info("请求接口: front/bili/note/es");logger.info("请求参数EsQueryDto:"+esQueryDto);// index es索引String index="bilibili_video_test";esQueryDto.setIndex(index);// 查询关键词 来源字段String[] fieldNames=new String[]{"top_words","title","description"};esQueryDto.setFieldNames(fieldNames);Page<Map<String, Object>> map=commonUtilService.selectNoteBrandAnalyseEs(esQueryDto);logger.info("----------------- 账号原贴展示列表 end  ----------------- ");return AjaxResult.success(map);}

业务逻辑层

 @Overridepublic Page<Map<String, Object>> selectNoteBrandAnalyseEs(EsQueryDto esQueryDto) {Page<Map<String, Object>> map= new Page<>();try {EsQuery esQuery=new EsQuery();esQuery.setIndex(esQueryDto.getIndex());esQuery.setAccountId(esQueryDto.getAccountId());// 如果排序字段为null  默认根据publish_time 字段进行排序String  sortField=esQueryDto.getSortField()==null?"publish_time":esQueryDto.getSortField();esQuery.setSortField(sortField);// String[] fieldNames=new String[]{"content"};esQuery.setFieldNames(esQueryDto.getFieldNames());esQuery.setContent(esQueryDto.getContent());esQuery.setStartPage(esQueryDto.getStartPage());esQuery.setPageSize(esQueryDto.getPageSize());esQuery.setBeginTime(esQueryDto.getBeginTime());esQuery.setEndTime(esQueryDto.getEndTime());map=  elasticsearchUtil.searchDataPage(esQuery);} catch (Exception e) {log.error("获取"+esQueryDto.getIndex()+"达人原贴程序异常:"+e.getMessage());throw new RuntimeException("获取达人原贴程序异常");}return map;}

请求实体类


import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;@Data
public class EsQueryDto {
//    实体设置参数样例
//    String[] fieldNames = new String[]{"title", "top_words"};
//    esQuery.setIndex("xiaohongshu_note_test");
//    esQuery.setAccountId(1);
//    esQuery.setContent("可口可乐");
//    esQuery.setSortField("publish_time");
//    esQuery.setStartPage(1);
//    esQuery.setPageSize(10);
//    esQuery.setFieldNames(fieldNames);
//    Page<Map<String, Object>> list = elasticsearchUtil.searchDataPage(esQuery);
//    esQuery.setBeginTime("2020-08-25");
//    esQuery.setEndTime("2021-08-25");//   index         索引/**   ES索引*/private String index;/**   账号id */@NotNull(message = "accountId 不能为null")private Integer accountId;/**   查询值 */private String content = "";/**   排序字段 */private String sortField ;/**    查询字段可以多字段查询 */private String[] fieldNames;/**   开始页 */@NotNull(message = "startPage 不能为null")private int startPage;/**   每页条数 */@NotNull(message = "pageSize 不能为null")private int pageSize;/**   开始时间 */@NotBlank(message = "beginTime 不能为null")private String beginTime;/**   结束时间 */@NotBlank(message = "endTime 不能为null")private String endTime;}

elasticsearch搜索引擎下载安装相关推荐

  1. ElasticSearch(一)8.4.3版下载安装

    目录 1.ElasticSearch简介 1.1ElasticSearch的使用案例 1.2 ElasticSearch与solr的对比 2.1 安装(版本:elasticsearch-8.4.3) ...

  2. 拾忆Elasticsearch01:Elasticsearch概述及相关ES、IK分词器等下载安装

    为了防止老年痴呆记不住学过的Elasticsearch,在这里写点blog回顾一下 写在前面,建议下载以下出现的Elasticsearch版本,我之前下的7.6.1在这里找不到对应的springboo ...

  3. Elasticsearch 6.x 下载安装

    下载ES 下载ES安装包上传至服务器,地址为: https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.1.0.tar ...

  4. 一、ElasticSearch5.6.3下载安装步骤 说明:ElasticSearch的运行不能用root执行,自己用useradd命令新建一个用户如下所示: sueradd chen passw

    一.ElasticSearch5.6.3下载安装步骤 说明:ElasticSearch的运行不能用root执行,自己用useradd命令新建一个用户如下所示: sueradd chen passwd ...

  5. elasticsearch 7.9.3知识归纳整理(一)之 es,kibana,ik的下载安装

    es,kibana,ik的下载安装 下载地址 es下载地址:https://www.elastic.co/cn/downloads/elasticsearch kibana下载地址: https:// ...

  6. Elasticsearch下载安装

    注:Elasticsearch 需要 Java 8 环境,在安装Elasticsearch之前先安装好JDK. 1.Windows版 1.1.下载 访问官网的下载地址:https://www.elas ...

  7. ElasticSearch简介与安装

    简介 ElasticSearch一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.它是用Java开发的,是当前流行的企业级搜索引擎.设计用于 ...

  8. elasticsearch,elasticsearch-service安装

    在Windows上安装Elasticsearch.zip 1 安装条件 安装需具备java 8或更高版本:官方的Oracle发行版,只需安装JDK Elasticsearch的ZIP安装包--安装包地 ...

  9. ElasticSearch及插件安装

    序言:Lucene和Solr和Elasticsearch的区别 Lucene Lucene是apache下的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全 ...

最新文章

  1. SQLServer 数据库变成单个用户后无法访问问题的解决方法
  2. 【译】Withdrawal symptoms
  3. Spring Boot快速搭建入门程序
  4. c语言整数检验,C程序整数缺陷的检测与修复
  5. java dwr实现消息推送_dwr消息推送
  6. AbsListView.LayoutParams
  7. 运行指定代码_JavaScript 运行机制(Event Loop)详解
  8. Vuejs模拟Ajax请求接口(天气预报API)跨域问题 - 案例篇
  9. 聊聊 Python 的单元测试框架(一):unittest
  10. Windows应用程序组成及编程步骤
  11. 应急响应.windows
  12. HTTP协议格式详解
  13. 有消息队列的地方,就有英特尔傲腾持久内存
  14. 在浏览器中打开“只能用微信内置浏览器”打开的页面
  15. leetcode奇技淫巧-递归中途强制跳出
  16. 软件工程实训有必要吗_软件工程专业有没有必要考研
  17. 2019年最新的一波手机APP分享,每一个都是大家的菜哦!
  18. SQL Error: 904, SQLState: 42000
  19. t460 拆解_ThinkPad T460s开箱及更换内存和硬盘
  20. 网易相册列表分析 (转)

热门文章

  1. 本科计算机论文致谢词,有关本科毕业的论文致谢词范文
  2. 教程 | 校徽头像制作小程序前端实现
  3. FPGA学习笔记25--乘累加器
  4. 瑞达利欧《原则》.mobi
  5. 【Mac】MindNode for Mac 免费
  6. spss citespace mysql_Citespace软件操作详解!
  7. 60个世界规模最大集装箱港口收费排名公布,中国港口收费远低于美国 | 美通社头条...
  8. 电脑耳机左右耳声音大小不同和突然音量无法控制一直闪烁或刷新的解决方法(百试百灵)
  9. iOS自定义长按手势,随意拖动Cell
  10. 用定积分计算位移与距离示例: