elasticsearch 6.0java api的使用

elasticsearch 6.0 中java api的使用

1:使用java api创建elasticsearch客户端

package com.search.elasticsearch;

import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.transport.client.PreBuiltTransportClient;

import java.io.IOException;
import java.io.InputStream;
import java.net.InetAddress;
import java.util.Properties;

public class ElasticsearchConfig {
    private static TransportClient client;
    public TransportClient getElasticsearchClient() {
        try {
            Settings settings = Settings.builder()
                    .put("cluster.name", "my-esLearn")  //连接的集群名
                    .put("client.transport.ignore_cluster_name", true)  //如果集群名不对,也能连接
                    .build();
            //创建client
            client = new PreBuiltTransportClient(settings)
                    .addTransportAddress(new TransportAddress(InetAddress.getByName("127.0.0.1"), 9300));  //主机和端口号
            return client;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

2:使用客户端创建索引,索引中 某些字段指定ik分词器等

package com.search.elasticsearch;

import org.elasticsearch.action.DocWriteResponse;
import org.elasticsearch.action.admin.indices.analyze.AnalyzeRequestBuilder;
import org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequest;
import org.elasticsearch.action.bulk.BulkItemResponse;
import org.elasticsearch.action.bulk.BulkRequestBuilder;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.IndicesAdminClient;
import org.elasticsearch.client.Requests;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;

import java.io.IOException;
import java.io.InputStream;
import java.net.InetAddress;
import java.util.Date;
import java.util.List;
import java.util.Properties;
import java.util.ResourceBundle;
import java.util.concurrent.ExecutionException;

import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;

public class ElasticSearchUtil {

    private static TransportClient client;
    public ElasticSearchUtil() {
        this.client=new ElasticsearchConfig().getElasticsearchClient();  //使用上面创建好的客户端添加到类中。
    }

    //创建索引,并给索引某些字段指定iK分词,以后向该索引中查询时,就会用ik分词。
    public void createIndex() throws IOException {
        //创建映射
        XContentBuilder mapping = XContentFactory.jsonBuilder()
                .startObject()
                .startObject("properties")
                //      .startObject("m_id").field("type","keyword").endObject()                     //title:字段名,  type:文本类型       analyzer :分词器类型                 .startObject("title").field("type", "text").field("analyzer", "ik_smart").endObject()   //该字段添加的内容,查询时将会使用ik_smart分词
                .startObject("content").field("type", "text").field("analyzer", "ik_max_word").endObject()
                .endObject()
                .endObject();

        //index:索引名   type:类型名(可以自己定义)
        PutMappingRequest putmap = Requests.putMappingRequest("index").type("type").source(mapping);
        //创建索引
        client.admin().indices().prepareCreate("index").execute().actionGet();
        //为索引添加映射
        client.admin().indices().putMapping(putmap).actionGet();
    }
}

这个时候索引就创建好了,mapping不能掉

3:  向上一步创建的索引中添加内容,包括id,id不能重复

    public void createIndex1() throws IOException {
        IndexResponse response = client.prepareIndex("index", "type", "1") //索引,类型,id
                .setSource(jsonBuilder()
                        .startObject()
                        .field("title", "title")   //字段,值
                        .field("content", "content")
                        .endObject()
                ).get();
    }

使用postman查询该索引:

4:更新索引,更新刚才创建的索引,如果id相同将会覆盖掉刚才的内容

    public void updateByClient() throws IOException, ExecutionException, InterruptedException {
        //每次添加id应该不同,相当于数据表中的主键,相同 的话将会进行覆盖
        UpdateResponse response = client.update(new UpdateRequest("index", "type", "1")
                .doc(XContentFactory.jsonBuilder()
                        .startObject()
                        .field("title", "中华人民共和国国歌,国歌是最好听的歌")
                        .field("content","中华人民共和国国歌,国歌是最好听的歌")
                        .endObject()
                )).get();
    }

使用postman查看该索引的内容

5:对索引进行查询,因为分词不同,分词器将会对要查询的内容先分词,再在子段中查询。

查询 子段 content

查询结果:

对title子段进行查询:

查询结果:

6:向 索引中再添加一条数据

    public void createIndex2() throws IOException {
        IndexResponse response = client.prepareIndex("index", "type", "2")
                .setSource(jsonBuilder()
                        .startObject()
                        .field("title", "中华民族是伟大的民族")
                        .field("content", "中华民族是伟大的民族")
                        .endObject()
                ).get();
    }

对字段content进行查询:

结果:两条数据都能查到,因为对查询内容 “中华人民共和国国歌”   进行细粒度划分,含有“中华” 一词,两条数据中都包含“中华”。

对字段title 进行查询:

查询结果: 只有一条数据,因为对title  使用的是 粗粒度分词

7:search api的操作:

   public void search() {        SearchResponse response1 = client.prepareSearch("index1", "index")  //指定多个索引                .setTypes("type1", "type")  //指定类型                .setSearchType(SearchType.QUERY_THEN_FETCH)                .setQuery(QueryBuilders.matchQuery("title", "中华人民共和国国歌"))  // Query//                .setPostFilter(QueryBuilders.rangeQuery("age").from(12).to(18))     // Filter                .setFrom(0).setSize(60).setExplain(true)                .get();        long totalHits1= response1.getHits().totalHits;  //命中个数        System.out.println(totalHits1);

SearchResponse response2 = client.prepareSearch("index1", "index")  //指定多个索引                .setTypes("type1", "type")  //指定类型                .setSearchType(SearchType.QUERY_THEN_FETCH)                .setQuery(QueryBuilders.matchQuery("content", "中华人民共和国国歌"))  // Query//                .setPostFilter(QueryBuilders.rangeQuery("age").from(12).to(18))     // Filter                .setFrom(0).setSize(60).setExplain(true)                .get();        long totalHits2 = response2.getHits().totalHits;  //命中个数        System.out.println(totalHits2);    }

8:Get Api操作:

    public void get() {
        GetResponse response = client.prepareGet("index", "type", "1").get();
        Map<String, Object> source = response.getSource();
        Set<String> strings = source.keySet();
        Iterator<String> iterator = strings.iterator();
        while (iterator.hasNext()) {
            System.out.println(source.get(iterator.next()));
        }
    }

java api 官方文档:https://www.elastic.co/guide/en/elasticsearch/client/java-api/6.0/java-docs-index.html

原文地址:https://www.cnblogs.com/liyafei/p/8543309.html

时间: 2024-10-16 05:00:20

elasticsearch 6.0java api的使用的相关文章

使用JAVA操作ElasticSearch(Java API 和Spring Data ElasticSearch)

Java API 我的ElasticSearch集群的版本是6.2.4,导入elasticsearch相关的maven依赖也是6.2.4,不同版本的api可能会有差异 一:maven依赖 <!--elasticsearch核心依赖--> <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version

Elasticsearch使用REST API实现全文检索

通过rest api添加检索数据,阅读官方文档可以发现,elasticsearch支持动态映射,但是其中有不少问题,且听慢慢详解. 本文主要讲述三点内容: 1 Elasticsearch常用的rest api 2 Elasticsearch在添加索引时,动态映射报错:MapperParsingException[failed to parse]nested;JsonParseException 3 Elasticsearch使用bulk命令添加索引数据 ES REST API elasticse

探索Elasticsearch集群API

Elasticsearch提供了一个非常全面和强大的REST API,您可以使用与您的集群进行交互.为数不多的可以用API的事情如下: 检查您的集群.节点和索引健康状态和统计数据 管理集群.节点和索引数据和元数据 执行CRUD(创建.读取.更新和删除)索引和搜索操作 执行高级搜索操作,比如分页.排序.过滤.脚本.聚合,和许多其他人 1. 可以使用 _cat API查看elasticsearch的健康状况,但是启动时不能以守护进程方式启动. [[email protected] ~]#  curl

ElasticSearch 中 REST API 详解

本文主要内容: 1 ElasticSearch常用的操作 2 ElasticSearchbulk命令 ES REST API elasticsearch支持多种通讯,其中包括http请求响应服务,因此通过curl命令,可以发送http请求,并得到json返回内容. 常用的REST请求有: 检查集群状态 curl localhost:9200/_cat/health?v 检查节点状态 curl localhost:9200/_cat/nodes?v 查询全部索引 curl localhost:92

elasticsearch java操作 api

默认进行了elasticsearch安装和ik安装, 超时配置, 分页压力配置等 添加maven依赖 <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>2.4.0</version> </dependency> <dependency> <group

ElasticSearch聚合分析API——非常详细,如果要全面了解的话,最好看这个

转自:http://www.tianyiqingci.com/2016/04/11/esaggsapi/ 前言 说完了ES的索引与检索,接着再介绍一个ES高级功能API – 聚合(Aggregations),聚合功能为ES注入了统计分析的血统,使用户在面对大数据提取统计指标时变得游刃有余.同样的工作,你在hadoop中可能需要写mapreduce或hive,在mongo中你必须得用大段的mapreduce脚本,而在ES中仅仅调用一个API就能实现了. 开始之前,提醒老司机们注意,ES原有的聚合功

Elasticsearch常用操作API

1. 查询所有的索引 [[email protected] cx]# curl '10.0.0.5:9200/_cat/indices?v' health status index    pri rep docs.count docs.deleted store.size pri.store.size  yellow open   customer   5   1          2            0      6.6kb          6.6kb  yellow open   b

ElasticSearch(五) Delete API

一.根据查询结果删除(Delete By Query API) BulkByScrollResponse response = DeleteByQueryAction.INSTANCE.newRequestBuilder(client)   // transport client .filter(QueryBuilders.matchQuery("gender", "male"))    //查询条件 .source("persons")    

ElasticSearch(六) Update API

一.修改部分字段By  UpdateRequest UpdateRequest updateRequest = new UpdateRequest(); updateRequest.index("index"); updateRequest.type("type"); updateRequest.id("1"); updateRequest.doc(jsonBuilder() .startObject() .field("gender&