ElasticSearch在java应用简单示例

添加依赖

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

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

    </dependencies>

指定集群

private TransportClient getTransportClient() throws UnknownHostException {
        // 指定es集群
        Settings settings = Settings.builder().put("cluster.name", "my-application").build();
        // 创建访问es服务器的客户端
        return new PreBuiltTransportClient(settings)
                .addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.76.77"), 9300));
    }

此处的cluster.name和my-application,是elasticsearch.yml文件中的集群名字

准备工作

要添加中文,在kibana中先将title、content将默认分词器改成中文分词器(中文分词器的安装可见:https://blog.csdn.net/yanyf2016/article/details/103929829

PUT /test1
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 0
  },
  "mappings": {
    "properties":{
      "id":{
        "type":"long"
      },
      "title":{
        "type":"text",
        "analyzer":"ik_max_word"
      },
      "content":{
        "type":"text",
        "analyzer":"ik_max_word"
      },
      "postdate":{
        "type":"date"
      },
      "url":{
        "type":"text"
      }
    }
  }
}
PUT /lib3
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 0
  },
  "mappings": {
    "properties":{
      "name":{"type":"text"},
      "address":{"type":"text"},
      "age":{"type":"integer"},
      "interests":{"type":"text"},
      "birthday":{"type":"date"}
    }
  }
}

多添加几条数据

PUT /lib3/_doc/1
{
  "name":"tom",
  "address":"china",
  "age":23,
  "interests":["台球","篮球"],
  "birthday":"2020-01-11"
}

添加文档

    public void add() throws Exception {
        TransportClient client = getTransportClient();
        // 添加文档
        XContentBuilder doc = XContentFactory.jsonBuilder()
                .startObject()
                .field("id", "1")
                .field("title", "java这是一个中文的标题")
                .field("content", "中文内容java")
                .field("postdate", "2020-01-13")
                .field("url", "https://blog.csdn.net/yanyf2016")
                .endObject();
        IndexResponse response = client.prepareIndex("test1", "_doc", "10")
                .setSource(doc).get();
        System.out.println(response.status());
    }

查询数据

    public void select() throws UnknownHostException {
        TransportClient client = getTransportClient();

        // 数据查询
        GetResponse response = client.prepareGet("test1", "_doc", "10").execute().actionGet();
        // 得到查询出的数据
        System.out.println(response.getSourceAsString());
        client.close();
    }

删除文档

    public void delete() throws Exception {
        TransportClient client = getTransportClient();
        // 删除文档
        DeleteResponse response = client.prepareDelete("test1", "_doc", "10").get();
        System.out.println(response.status());
    }

更新文档

    public void update() throws Exception {
        TransportClient client = getTransportClient();
        // 更新文档
        UpdateRequest request = new UpdateRequest();
        request.index("test1")
                .type("_doc")
                .id("10")
                .doc(
                        XContentFactory.jsonBuilder().startObject()
                                .field("title", "java设计模式")
                                .endObject()
                );
        UpdateResponse response = client.update(request).get();
        System.out.println(response.status());
    }

upsert

    public void upsert() throws Exception {
        TransportClient client = getTransportClient();
        // 添加文档
        IndexRequest request1 = new IndexRequest("test1", "_doc", "8")
                .source(
                        XContentFactory.jsonBuilder()
                                .startObject()
                                .field("id", "2")
                                .field("title", "html标题")
                                .field("content", "中文内容java")
                                .field("postdate", "2020-01-13")
                                .field("url", "https://blog.csdn.net/yanyf2016")
                                .endObject()
                );
        UpdateRequest request2 = new UpdateRequest("test1", "_doc", "8")
                .doc(
                        XContentFactory.jsonBuilder().startObject()
                                .field("title", "java模式")
                                .endObject()
                ).upsert(request1);
        UpdateResponse response = client.update(request2).get();
        System.out.println(response.status());
    }

mget

// 批量查询
    public void mget() throws Exception {
        TransportClient client = getTransportClient();
        MultiGetResponse responses = client.prepareMultiGet()
                .add("test1", "_doc", "8", "10")
                .add("lib3", "user", "2", "3")
                .get();
        for (MultiGetItemResponse respons : responses) {
            GetResponse response = respons.getResponse();
            if (response != null && response.isExists()) {
                System.out.println(response.getSourceAsString());
            }
        }
    }

bulk

// 批量添加
    public void bulk() throws Exception {
        TransportClient client = getTransportClient();
        BulkRequestBuilder bulkrequestbuilder = client.prepareBulk();
        // 批量添加
        bulkrequestbuilder.add(client.prepareIndex("test1", "_doc", "7")
                .setSource(
                        XContentFactory.jsonBuilder()
                                .startObject()
                                .field("id", "3")
                                .field("title", "python")
                                .field("content", "content")
                                .field("postdate", "2020-01-23")
                                .field("url", "www.baidu.com")
                                .endObject()
                )
        );
        bulkrequestbuilder.add(client.prepareIndex("test1", "_doc", "9")
                .setSource(
                        XContentFactory.jsonBuilder()
                                .startObject()
                                .field("id", "5")
                                .field("title", "fullter")
                                .field("content", "content")
                                .field("postdate", "2020-01-23")
                                .field("url", "www.ali.com")
                                .endObject()
                )
        );
        BulkResponse bulkItemResponses = bulkrequestbuilder.get();
        System.out.println(bulkItemResponses.status());
        if (bulkItemResponses.hasFailures()) {
            System.out.println("失败");
        }
    }

matchAllQuery

    public void matchAllQuery() throws Exception {
        TransportClient client = getTransportClient();
        QueryBuilder qb = QueryBuilders.matchAllQuery();
        SearchResponse sr = client.prepareSearch("test1")
                .setQuery(qb)
                .setSize(3).get();
        SearchHits hits = sr.getHits();
        for (SearchHit hit : hits) {
            System.out.println(hit.getSourceAsString());
            Map<String, Object> sourceAsMap = hit.getSourceAsMap();
            for (String key : sourceAsMap.keySet()) {
                System.out.println(key + "=" + sourceAsMap.get(key));
            }
        }
    }

matchQuery

// 查询某个字段
    public void match() throws Exception {
        TransportClient client = getTransportClient();
        QueryBuilder builder = QueryBuilders.matchQuery("content", "java");
        SearchResponse response = client.prepareSearch("test1")
                .setQuery(builder)
                .setSize(3)
                .get();

        SearchHits hits = response.getHits();
        for (SearchHit hit : hits) {
            System.out.println(hit.getSourceAsString());
            Map<String, Object> sourceAsMap = hit.getSourceAsMap();
            for (String key : sourceAsMap.keySet()) {
                System.out.println(key + "=" + sourceAsMap.get(key));
            }
        }
    }

multiMatchQuery

// 查询多个字段
    public void multiMatchQuery() throws Exception {
        TransportClient client = getTransportClient();
        QueryBuilder builder = QueryBuilders.multiMatchQuery("中", "title", "content");
        SearchResponse response = client.prepareSearch("test1")
                .setQuery(builder)
                .setSize(3)
                .get();

        SearchHits hits = response.getHits();
        for (SearchHit hit : hits) {
            System.out.println(hit.getSourceAsString());
            Map<String, Object> sourceAsMap = hit.getSourceAsMap();
            for (String key : sourceAsMap.keySet()) {
                System.out.println(key + "=" + sourceAsMap.get(key));
            }
        }
    }

term

    public void term() throws Exception {
        TransportClient client = getTransportClient();
        QueryBuilder builder = QueryBuilders.termQuery("title", "模式");
        SearchResponse response = client.prepareSearch("test1")
                .setQuery(builder)
                .setSize(3)
                .get();

        SearchHits hits = response.getHits();
        for (SearchHit hit : hits) {
            System.out.println(hit.getSourceAsString());
            Map<String, Object> sourceAsMap = hit.getSourceAsMap();
            for (String key : sourceAsMap.keySet()) {
                System.out.println(key + "=" + sourceAsMap.get(key));
            }
        }
    }

terms

    public void terms() throws Exception {
        TransportClient client = getTransportClient();
        QueryBuilder builder = QueryBuilders.termsQuery("title", "模式", "java");
        SearchResponse response = client.prepareSearch("test1")
                .setQuery(builder)
                .setSize(3)
                .get();

        SearchHits hits = response.getHits();
        for (SearchHit hit : hits) {
            System.out.println(hit.getSourceAsString());
            Map<String, Object> sourceAsMap = hit.getSourceAsMap();
            for (String key : sourceAsMap.keySet()) {
                System.out.println(key + "=" + sourceAsMap.get(key));
            }
        }
    }

范围查询

    public void range() throws Exception {
        TransportClient client = getTransportClient();
        // 范围range查询
//        QueryBuilder builder = QueryBuilders.rangeQuery("postdate").from("2020-01-10").to("2020-01-15").format("yyyy-MM-dd");
        // prefix查询
//        QueryBuilder builder = QueryBuilders.prefixQuery("title","java");
        // 通配符wildcard查询
//        QueryBuilder builder = QueryBuilders.wildcardQuery("title","java*");
        // 模糊查询
//        QueryBuilder builder = QueryBuilders.fuzzyQuery("title","j");
        //type查询
//        QueryBuilder builder = QueryBuilders.typeQuery("_doc");
        // ids查询
        QueryBuilder builder = QueryBuilders.idsQuery().addIds("8", "9");
        SearchResponse response = client.prepareSearch("test1")
                .setQuery(builder)
                .get();

        SearchHits hits = response.getHits();
        for (SearchHit hit : hits) {
            System.out.println(hit.getSourceAsString());
            Map<String, Object> sourceAsMap = hit.getSourceAsMap();
            for (String key : sourceAsMap.keySet()) {
                System.out.println(key + "=" + sourceAsMap.get(key));
            }
        }
    }

聚合查询

    public void sum() throws Exception {
        TransportClient client = getTransportClient();

//        AggregationBuilder agg = AggregationBuilders.max("aggMax").field("age");
//        SearchResponse response = client.prepareSearch("lib3").addAggregation(agg).get();
//        Max aggMax = response.getAggregations().get("aggMax");
//        System.out.println(aggMax.getValue());

//        AggregationBuilder agg = AggregationBuilders.min("aggMin").field("age");
//        SearchResponse response = client.prepareSearch("lib3").addAggregation(agg).get();
//        Min aggMax = response.getAggregations().get("aggMin");
//        System.out.println(aggMax.getValue());

        // 求基数
        AggregationBuilder agg = AggregationBuilders.cardinality("aggCardinality").field("age");
        SearchResponse response = client.prepareSearch("lib3").addAggregation(agg).get();
        Cardinality cardinality = response.getAggregations().get("aggCardinality");
        System.out.println(cardinality.getValue());
    }

querystring

    public void queryString() throws UnknownHostException {
        TransportClient client = getTransportClient();
        // 查询某个字段
//        QueryBuilder build = QueryBuilders.commonTermsQuery("name","tom");
        // 查询所有字段 +号表示含有 -号表示不含有
//        QueryBuilder build = QueryBuilders.queryStringQuery("+喝酒 -跳舞");
        QueryBuilder build = QueryBuilders.simpleQueryStringQuery("+喝酒");

        SearchResponse response = client.prepareSearch("lib3")
                .setQuery(build)
                .get();
        SearchHits hits = response.getHits();
        for (SearchHit hit : hits) {
            System.out.println(hit.getSourceAsString());
        }
    }

boolquery

// 组合查询
    public void boolquery() throws UnknownHostException {
        TransportClient client = getTransportClient();
//        QueryBuilder build = QueryBuilders.boolQuery()
//                            .must(QueryBuilders.matchQuery("interests","唱歌"))
//                            .mustNot(QueryBuilders.matchQuery("interests","跳舞"))
//                            .should(QueryBuilders.matchQuery("address","china"))
//                            .filter(QueryBuilders.rangeQuery("birthday").gte("2019-01-01").format("yyyy-MM-dd"));
        // 不计算相关度分数
        QueryBuilder build = QueryBuilders.constantScoreQuery(QueryBuilders.termQuery("name", "zs"));
        SearchResponse response = client.prepareSearch("lib3")
                .setQuery(build)
                .get();
        SearchHits hits = response.getHits();
        for (SearchHit hit : hits) {
            System.out.println(hit.getSourceAsString());
        }
    }

分组聚合

    public void termss() throws UnknownHostException {
        TransportClient client = getTransportClient();

        AggregationBuilder agg = AggregationBuilders.terms("terms").field("age");
        SearchResponse response = client.prepareSearch("lib3").addAggregation(agg).execute().actionGet();
        Terms terms = response.getAggregations().get("terms");
        for (Terms.Bucket entry : terms.getBuckets()) {
            System.out.println(entry.getKey() + ":" + entry.getDocCount());
        }
    }

filter聚合

    public void filter() throws UnknownHostException {
        TransportClient client = getTransportClient();

        QueryBuilder query = QueryBuilders.termQuery("age", 26);
        AggregationBuilder agg = AggregationBuilders.filter("filter", query);
        SearchResponse response = client.prepareSearch("lib3").addAggregation(agg).execute().actionGet();
        Filter filter = response.getAggregations().get("filter");
        System.out.println(filter.getDocCount());
    }

filters聚合

    public void filters() throws UnknownHostException {
        TransportClient client = getTransportClient();

        AggregationBuilder agg = AggregationBuilders.filters("filters",
                new FiltersAggregator.KeyedFilter("喝酒", QueryBuilders.termQuery("interests", "喝酒")),
                new FiltersAggregator.KeyedFilter("跳舞", QueryBuilders.termQuery("interests", "跳舞")));
        SearchResponse response = client.prepareSearch("lib3").addAggregation(agg).execute().actionGet();
        Filters filters = response.getAggregations().get("filters");
        for (Filters.Bucket entery : filters.getBuckets()) {
            System.out.println(entery.getKey() + ":" + entery.getDocCount());
        }
    }

range聚合

    public void rang() throws UnknownHostException {
        TransportClient client = getTransportClient();

        AggregationBuilder agg = AggregationBuilders
                .range("range")
                .field("age")
                .addUnboundedTo(50)//(,to)
                .addRange(20, 25)//[from ,to)
                .addUnboundedFrom(25);//[from,)
        SearchResponse response = client.prepareSearch("lib3").addAggregation(agg).execute().actionGet();
        Range range = response.getAggregations().get("range");
        for (Range.Bucket entery : range.getBuckets()) {
            System.out.println(entery.getKey() + ":" + entery.getDocCount());
        }
    }

missing聚合

    public void missing() throws UnknownHostException {
        TransportClient client = getTransportClient();

        AggregationBuilder agg = AggregationBuilders
                .missing("missing")
                .field("age");
        SearchResponse response = client.prepareSearch("lib3").addAggregation(agg).execute().actionGet();
        Aggregation aggregation = response.getAggregations().get("missing");
        System.out.println(aggregation.toString());
    }

集群管理

    public void cluster() throws UnknownHostException {
        TransportClient client = getTransportClient();

        ClusterHealthResponse health = client.admin().cluster().prepareHealth().get();
        String clusterName = health.getClusterName();
        System.out.println("clusterName=" + clusterName);

        int numberOfDataNodes = health.getNumberOfDataNodes();
        System.out.println("numberOfDataNodes=" + numberOfDataNodes);

        int numberOfNodes = health.getNumberOfNodes();
        System.out.println("numberOfNodes=" + numberOfNodes);

        for (ClusterIndexHealth health1 : health.getIndices().values()) {
            String index = health1.getIndex();
            int numberOfShards = health1.getNumberOfShards();
            int numberOfReplicas = health1.getNumberOfReplicas();
            System.out.printf("index=%s,numberOfShards=%d,numberOfReplicas=%d\n", index, numberOfShards, numberOfReplicas);
            ClusterHealthStatus status = health1.getStatus();
            System.out.println(status.toString());
        }

    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ElasticsearchJava是一种常用的编程语言。你可以使用Java编写与Elasticsearch交互的应用程序。Elasticsearch提供了官方的Java客户端,使开发人员能够轻松地与Elasticsearch集群进行通信。 要使用JavaElasticsearch交互,你首先需要添加ElasticsearchJava客户端库作为依赖项。然后,你可以使用Java客户端提供的API来执行各种操作,如索引文档、搜索、聚合等。 以下是一个简单示例,展示了如何使用Java客户端连接到Elasticsearch并索引一个文档: ```java import org.elasticsearch.action.index.IndexRequest; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.common.xcontent.XContentType; import java.io.IOException; public class ElasticsearchJavaExample { public static void main(String[] args) { try (RestHighLevelClient client = new RestHighLevelClient( RestClient.builder("localhost:9200"))) { IndexRequest request = new IndexRequest("my_index"); request.id("1"); String jsonString = "{" + "\"name\":\"John\"," + "\"age\":30," + "\"city\":\"New York\"" + "}"; request.source(jsonString, XContentType.JSON); client.index(request, RequestOptions.DEFAULT); } catch (IOException e) { e.printStackTrace(); } } } ``` 这个例子创建了一个名为"my_index"的索引,并在该索引中索引了一个文档。你可以根据自己的需求修改代码和配置。 希望这个简单示例能帮助到你开始使用JavaElasticsearch交互。如果你有更多的问题,请随时提问!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值