Elasticsearch的使用

我这边是以elasticsearch-2.4.3为例:引入maven

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>transport</artifactId>
    <version>6.4.3</version>
  </dependency>

<dependency>

    <groupId>org.apache.logging.log4j</groupId>

    <artifactId>log4j-core</artifactId>

    <version>2.11.1</version>

</dependency>

1、创建连接器:

import org.elasticsearch.client.transport.TransportClient;  
import org.elasticsearch.common.settings.Settings;  
import org.elasticsearch.common.transport.InetSocketTransportAddress;  
  
import java.net.InetAddress;  
import java.net.UnknownHostException;  
  
public class EsTcpClient {  

 private static TransportClient client;  
  
    /** 
     * 获取TCP 客户端 
     * 
     * @return 
     */  
    public static synchronized TransportClient getClient() {  
        if (client == null) {  
            build();  
        }  
        return client;  
    }  
  
    /** 
     * 关闭客户端 
     */  
    public static void close() {  
        if (client != null) {  
            client.close();  
        }  
    }  
  
    /** 
     * 建立连接 
     * 
     * @return 
     */  
    private static void build() {  
        try {  
            //特别注意:如果cluster 起了名字,需要在连接时指定名字,否则验证客户端连接的不是默认集群elasticsearch,会忽略,则无法找到节点  
            Settings settings = Settings.settingsBuilder()  
                    .put("cluster.name", "elasticsearch").build();
//                    .put("client.transport.ignore_cluster_name", true).build(); // 忽略集群名字验证, 打开后集群名字不对也能连接上
            client = TransportClient.builder().settings(settings).build()  
                    .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName('localhost'), 9300));  
 
        } catch (UnknownHostException e) {  
            throw new RuntimeException(e);  
        }  
    }  
  
}  

impl类

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
import org.elasticsearch.action.count.CountResponse;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.sort.SortOrder;

import com.gky.common.constant.ElasticSearchIndexTypeConstant.IndexType;
import com.gky.common.util.GsonHolder;


@SuppressWarnings("deprecation")
public class ElasticSearchTcpDaoImpl{
      //TCP连接客户端:  
    private  TransportClient client = null;  
  
    public ElasticSearchTcpDaoImpl(TransportClient client) {  
        this.client = client;  
    }  
    public TransportClient getClient() {  
        return client;
    }   

    public boolean careateIndex(String Mapperjson, IndexType indexType) {
        CreateIndexResponse createIndexResponse = client.admin().indices().prepareCreate(indexType.INDEX()).addMapping(indexType.INDEX(), Mapperjson).get(); 
        return createIndexResponse.isAcknowledged();
    }
    
    public boolean insert(Object doc,Long id,IndexType indexType) {
        String json = GsonHolder.gson.toJson(doc);  
        IndexResponse response = client.prepareIndex(indexType.INDEX(), indexType.TYPE(), String.valueOf(id)).setSource(json).get();  
        return response.isCreated();  
    }
    
    public boolean update(Object doc,Long oid,IndexType indexType) {
        String json = GsonHolder.gson.toJson(doc);  
          
        UpdateResponse response = client.prepareUpdate(indexType.INDEX(), indexType.TYPE(), String.valueOf(oid))  
                .setDoc(json)  
                .get();  
        
        return !response.isCreated();  
    }

    
    public boolean delete(long id,IndexType indexType) {
        DeleteResponse response = client.prepareDelete(indexType.INDEX(), indexType.TYPE(), String.valueOf(id)).get();  
        
        return response.isFound(); 
    }

    
    public Object searchById(Class<?> cls, long id,IndexType indexType) {
        GetResponse response = client.prepareGet(indexType.INDEX(), indexType.TYPE(), String.valueOf(id)).get();  
        if (response.isExists()) {  
            String json = response.getSourceAsString();  
            return Gson.gson.fromJson(json, cls);  
        }  
        return null; 
    }
    
    public List<Object> searchByUserId(Class<?> cls, long id,IndexType indexType, Integer pageStart, Integer pageSize) {
        QueryBuilder filter = new BoolQueryBuilder()  
        .must(QueryBuilders.termQuery("modifiedId", id)); 
        SearchResponse response = client.prepareSearch(indexType.INDEX())
                .setTypes(indexType.TYPE())
                .setQuery(filter)
                .setFrom(pageStart)
                .addSort("addTime", SortOrder.DESC) 
                .setSize(pageSize)
                .execute()
                .actionGet();  
        SearchHit[] hits = response.getHits().getHits();  
        List<Object> objs = new ArrayList<>();
        for (SearchHit hit : hits) {  
            Object obj= GsonHolder.gson.fromJson(hit.getSourceAsString(), cls);
            objs.add(obj);  
        } 
        return objs; 
    }
    
    /**
     * 全查
     */
    public List<Object> searchAll(Class<?> cls,IndexType indexType, Integer pageStart, Integer pageSize,String start,String end,String model,String makeObject,String modifiedName) {
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
        if(indexType.name().equals("LOGS")){
            if (StringUtils.isNotBlank(model)) {
                //通配符查询
                boolQueryBuilder.must(QueryBuilders.wildcardQuery("model", model)); 
            }
            if (StringUtils.isNotBlank(makeObject)) {
                //查询解析查询字符串
                boolQueryBuilder.must(QueryBuilders.queryStringQuery(makeObject).field("content"));
            }
            if (StringUtils.isNotBlank(modifiedName)) {
                boolQueryBuilder.must(QueryBuilders.queryStringQuery(modifiedName).field("modifiedName"));
            }
        }else{
            if (StringUtils.isNotBlank(start)) {
                //范围内查询
                boolQueryBuilder.must(QueryBuilders.rangeQuery("addTime").format(start)); 
            }
            if (StringUtils.isNotBlank(end)) {
                boolQueryBuilder.must(QueryBuilders.rangeQuery("addTime").to(end)); 
            }
            if (StringUtils.isNotBlank(model)) {
                //通配符查询
                boolQueryBuilder.must(QueryBuilders.wildcardQuery("model", model)); 
            }
            if (StringUtils.isNotBlank(makeObject)) {
                //查询解析查询字符串
                boolQueryBuilder.must(QueryBuilders.queryStringQuery(makeObject).field("makeObject"));
            }
        }
        SearchResponse response = client.prepareSearch(indexType.INDEX())
                .setTypes(indexType.TYPE())
                //.setQuery(QueryBuilders.matchAllQuery())
                //.addSort(SortBuilders.fieldSort("addTime").order(SortOrder.DESC))
                .addSort("addTime", SortOrder.DESC) 
                .setFrom(pageStart)
                .setSize(pageSize)
                .setQuery(boolQueryBuilder)
                .execute()
                .actionGet();
        
        SearchHit[] hits = response.getHits().getHits();  
        List<Object> objs = new ArrayList<>();
        for (SearchHit hit : hits) {  
            Object obj= Gson.gson.fromJson(hit.getSourceAsString(), cls);
            objs.add(obj);  
        } 
        return objs; 
    }
    public List<Object> searchAll(Class<?> cls,IndexType indexType, Integer pageStart, Integer pageSize, String mode) {
        QueryBuilder filter = new BoolQueryBuilder()
        .must(QueryBuilders.termQuery("searchMode", mode)); 
        
        SearchResponse response = client.prepareSearch(indexType.INDEX())
                .setTypes(indexType.TYPE())
                //.setQuery(QueryBuilders.matchAllQuery())
                .setQuery(filter)
                //.addSort(SortBuilders.fieldSort("addTime").order(SortOrder.DESC))
                .addSort("addTime", SortOrder.DESC) 
                .setFrom(pageStart)
                .setSize(pageSize)
                .execute()
                .actionGet();  
        SearchHit[] hits = response.getHits().getHits();  
        List<Object> objs = new ArrayList<>();
        for (SearchHit hit : hits) {  
            Object obj= Gson.gson.fromJson(hit.getSourceAsString(), cls);
            objs.add(obj);  
        } 
        return objs; 
    }
    public List<Object> searchAll(Class<?> cls,IndexType indexType, Integer pageStart, Integer pageSize, String mode,Object modifierId) {
        QueryBuilder filter = new BoolQueryBuilder()
        .must(QueryBuilders.termQuery("searchMode", mode)) 
        .must(QueryBuilders.termQuery("modifierId", modifierId)); 
        SearchResponse response = client.prepareSearch(indexType.INDEX())
                .setTypes(indexType.TYPE())
                //.setQuery(QueryBuilders.matchAllQuery())
                .setQuery(filter)
                //.addSort(SortBuilders.fieldSort("addTime").order(SortOrder.DESC))
                .addSort("addTime", SortOrder.DESC) 
                .setFrom(pageStart)
                .setSize(pageSize)
                .execute()
                .actionGet();  
        SearchHit[] hits = response.getHits().getHits();  
        List<Object> objs = new ArrayList<>();
        for (SearchHit hit : hits) {  
            Object obj= Gson.gson.fromJson(hit.getSourceAsString(), cls);
            objs.add(obj);  
        } 
        return objs; 
    }
    
    /**
     * total
     */
    public Integer getTotal(IndexType indexType) {
        CountResponse countResponse = client.prepareCount(indexType.INDEX()).setTypes(indexType.TYPE()).get();
        Long logt=countResponse.getCount();
        return logt.intValue();
    }
    public Integer getTotal(IndexType indexType,Long oid) {
        QueryBuilder filter = new BoolQueryBuilder()
        .must(QueryBuilders.termQuery("modifiedId", oid)); 
        CountResponse countResponse = client.prepareCount(indexType.INDEX()).setTypes(indexType.TYPE()).setQuery(filter).get();
        Long logt=countResponse.getCount();
        return logt.intValue();
    }
    public Integer getTotal(IndexType indexType,String start,String end,String model,String makeObject,String modifiedName) {
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
        if(indexType.name().equals("LOG")){
            if (StringUtils.isNotBlank(model)) {
                boolQueryBuilder.must(QueryBuilders.wildcardQuery("modifiyMode", model)); 
            }
            if (StringUtils.isNotBlank(makeObject)) {
                boolQueryBuilder.must(QueryBuilders.queryStringQuery(makeObject).field("content"));
            }
            if (StringUtils.isNotBlank(modifiedName)) {
                boolQueryBuilder.must(QueryBuilders.queryStringQuery(modifiedName).field("modifiedName"));
            }
        }else{
            if (StringUtils.isNotBlank(start)) {
                boolQueryBuilder.must(QueryBuilders.rangeQuery("addTime").format(start)); 
            }
            if (StringUtils.isNotBlank(end)) {
                boolQueryBuilder.must(QueryBuilders.rangeQuery("addTime").to(end)); 
            }
            if (StringUtils.isNotBlank(model)) {
                boolQueryBuilder.must(QueryBuilders.wildcardQuery("model", model)); 
            }
            if (StringUtils.isNotBlank(makeObject)) {
                boolQueryBuilder.must(QueryBuilders.queryStringQuery(makeObject).field("makeObject"));
            }
        }
        
        CountResponse countResponse = client.prepareCount(indexType.INDEX()).setTypes(indexType.TYPE()).setQuery(boolQueryBuilder).get();
        Long logt=countResponse.getCount();
        return logt.intValue();
    }

}
Gson类
public class Gson {  
    public static Gson gson;  
  
    public static JsonParser jsonParser;  
  
    static {  
        gson = new GsonBuilder()  
                .setDateFormat("yyyy-MM-dd HH:mm:ss")  
                .create();  
  
        jsonParser = new JsonParser();  
    }  
  
  
    public static JsonElement getTopLevelElement(String json, String fieldName) {  
        JsonObject jsonObject = GsonHolder.jsonParser.parse(json).getAsJsonObject();  
        return jsonObject.get(fieldName);  
    }  
}  

  

 

转载于:https://www.cnblogs.com/shuiqian/p/11118770.html

### 回答1: Elasticsearch 是一个流行的开源搜索引擎,广泛用于全文搜索、日志分析和数据可视化等领域。使用 Elasticsearch 可以帮助用户快速存储、搜索和分析大量的数据。 要使用 Elasticsearch,首先需要安装 Elasticsearch 和 Kibana(一个数据可视化工具)。然后,可以使用 Elasticsearch 的 API 来创建索引、添加文档、执行搜索和聚合等操作。 在创建索引时,需要定义索引的结构(即 mapping),包括字段类型、分析器和索引设置等。在添加文档时,可以将 JSON 格式的数据插入到索引中。在执行搜索时,可以使用 Query DSL 来构建查询语句,并获得与查询条件匹配的文档。 除了基本的搜索功能,Elasticsearch 还提供了许多高级功能,如聚合、分面搜索和地理位置搜索等。通过这些功能,可以更深入地了解数据,并从中提取有用的信息。 总之,Elasticsearch 是一个功能强大的搜索引擎,可以帮助用户处理大量的数据,并从中提取有用的信息。 ### 回答2: Elasticsearch是一个广泛使用的开源分布式搜索和分析引擎。它构建在Apache Lucene搜索引擎库之上,提供了一个简单而强大的RESTful接口,可用于进行实时搜索、数据分析和数据可视化。 Elasticsearch使用非常灵活和易于扩展。它具有以下几个关键特性: 1. 实时搜索:Elasticsearch可以在数据被索引后立即进行搜索,具有非常低的延迟。这使得它在处理实时数据或需要快速响应的应用中非常有用。 2. 分布式架构:Elasticsearch使用分布式架构,数据可以水平分割到多个节点上进行存储和处理。这使得它可以处理大量的数据,并具有高可用性和容错性。 3. 多种查询方式:Elasticsearch支持全文搜索、精确匹配、模糊搜索、聚合操作等多种查询方式。它使用基于DSL的查询语言,使得用户可以通过简单的JSON格式的请求进行复杂的查询操作。 4. 数据分析和可视化:Elasticsearch可以对索引数据进行聚合和分析,并通过与Kibana等工具的集成,实现数据的可视化和监控。 5. 插件生态系统:Elasticsearch拥有丰富的插件生态系统,用户可以根据自己的需求选择合适的插件进行功能扩展。例如,可以通过安装Elasticsearch-Hadoop插件实现与Hadoop集群的数据交互。 总之,Elasticsearch提供了一个快速、可靠的搜索和分析引擎,适用于各种场景,包括网站搜索、日志分析、电商推荐、实时监控等。它具有友好的用户界面和丰富的社区支持,使得使用和学习变得更加容易。 ### 回答3: Elasticsearch是一个开源的实时分布式搜索和分析引擎,它可以用于高效地存储、搜索和分析大规模的数据。以下是关于Elasticsearch的基本使用方法和优势的解释。 首先,为了使用Elasticsearch,我们需要安装它并启动集群。集群由一个或多个节点组成,每个节点都是一个独立的服务器。集群中的所有节点共享索引和数据,并协同工作以提供高可用性和性能。 其次,我们需要创建索引和映射。索引是一种用于存储和组织文档的数据结构,类似于数据库中的表。映射定义了文档中每个字段的数据类型和属性,例如字符串、数字、日期等。创建索引和映射后,我们可以将文档插入索引中。 使用Elasticsearch进行搜索时,我们可以构建复杂的查询来过滤和排序结果。查询可以包括全文搜索、范围查询、模糊匹配等。Elasticsearch使用倒排索引来加快搜索速度,倒排索引记录了每个词汇在哪些文档中出现。 在分析方面,Elasticsearch提供了强大的聚合功能,可以对文档进行统计和分组。聚合可以用于获取文档中的最大值、最小值、平均值等,也可以用于按照某个字段进行分组统计。 此外,Elasticsearch支持实时数据分析。它能够处理大规模的数据并实时更新搜索结果,适用于需要实时反馈和分析的场景,如日志分析、监控和实时报警等。 总的来说,Elasticsearch是一个功能强大的搜索和分析引擎,它以其高性能、可扩展性和易用性而闻名。无论是用于构建实时搜索引擎、日志分析系统还是大数据分析平台,Elasticsearch都是一个非常有价值的工具。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值