springboot对elasticsearch操作

springboot对elasticsearch操作首先你要先安装elasticsearch,简单的配置安装很简单这里就不做说明了

因为我使用的springboot是1.59版本elasticsearch版本是6.7.1而1.x版本的springboot貌似不支持elasticsearch6.7.1只支持elasticsearch2.x的版本所以这里采用的是比较复杂的方式用elasticsearch的api而不适用spring提供的spring data api

导入pom文件

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

首先是配置文件配置以下参数

elasticsearch.host=你所用的elasticsearch的端口号
elasticsearch.port=默认为9300
elasticsearch.clusterName=你所用的elasticsearch配置的cluster.name

查找你配置的elasticsearch的配置文件如图:

配置连接

@Configuration
public class EsConfig {
    @Value("${elasticsearch.host}")
    private String host;
    @Value("${elasticsearch.port}")
    private String port;
    @Value("${elasticsearch.clusterName}")
    private String clusterName;

    @Bean(name = "client")
    public TransportClient client() throws UnknownHostException {
        Settings settings = Settings.builder().put("cluster.name", clusterName).
                put("client.transport.sniff", true)
                .build();
        TransportClient client = new PreBuiltTransportClient(settings)
                .addTransportAddress(new TransportAddress(InetAddress.getByName(host), Integer.parseInt(port)));
        return client;
    }
}

接下来直接是测试案例,具体看业务需求

@RunWith(SpringRunner.class)
@SpringBootTest
public class ElasticsearchApplicationTests {

    private Logger logger = LoggerFactory.getLogger(ElasticsearchApplicationTests.class);

//    @Resource(name = "client")
//    TransportClient client;

    @Autowired
    TransportClient client;

    @Test
    public void contextLoads() {
    }

    public IndicesAdminClient getAdminClient() {
        return client.admin().indices();
    }

    /**
     * 判断索引是否存在
     */
    public boolean judgeIndexExists(String... indexName) {
        IndicesExistsResponse indicesExistsResponse = getAdminClient()
                .prepareExists(indexName)
                .execute()
                .actionGet();
        logger.info("indexes 【 {} 】 is exists ? :{}",Arrays.toString(indexName),indicesExistsResponse.isExists());
        return indicesExistsResponse.isExists();
    }


    /**
     * 创建索引
     */
    @Test
    public void createIndex() {
        if (judgeIndexExists("mytest")) {
            logger.info("索引【mytest】已存在");
            return;
        }
        createEsIndex("mytest", 5, 0);
    }

    /**
     * 创建索引
     *
     * @param indexName 索引名
     * @param shards    数据分片数
     * @param replicas  数据备份数
     */
    public void createEsIndex(String indexName, Integer shards, Integer replicas) {
        /**
         * number_of_replicas 是数据备份数,如果只有一台机器,设置为0
         * number_of_shards  是数据分片数,默认为5,有时候设置为3
         * 注意索引名必须为字母小写【可以使用toLowerCase()方法】
         */
        Settings settings = Settings.builder()
                .put("index.number_of_shards", shards)
                .put("index.number_of_replicas", replicas)
                .build();
        CreateIndexResponse createIndexResponse = getAdminClient()
                .prepareCreate(indexName)
                .setSettings(settings)
                .execute().actionGet();
        logger.info("create index【 {} 】 :{}",indexName ,createIndexResponse.index());
    }

    /**
     * 删除索引
     */
    @Test
    public void deleteIndex() {
        if (!judgeIndexExists("mytest")) {
            logger.info("该索引【mytest】已删除");
            return;
        }
        AcknowledgedResponse acknowledgedResponse = getAdminClient()
                .prepareDelete("mytest")
                .execute()
                .actionGet();
        logger.info("delete index:{}" , acknowledgedResponse.isAcknowledged());
    }

    /**
     * 添加文档
     */
    @Test
    public void putDocument() {
        try {
            XContentBuilder doc = jsonBuilder()
                    .startObject()
                    .field("id", "1")
                    .field("title", "springboot es")
                    .field("content", "springboot es 的集成")
                    .field("date", "2019-06-05 17:27:00")
                    .endObject();
            logger.info("insert Doc :{}" , doc.toString());
            IndexResponse indexResponse = client.prepareIndex("mytest", "test", "1")
                    .setSource(doc)
                    .get();
            logger.info("insert status :{}" , indexResponse.status());
            logger.info("result :{}" , indexResponse.toString());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 根据索引id查询索引
     */
    @Test
    public void queryById() {
        if (!judgeIndexExists("mytest")) {
            logger.info("该索引【mytest】不存在!");
            return;
        }
        GetResponse response = client.prepareGet("mytest", "test", "1").execute().actionGet();
        String jsonStr = response.getSourceAsString();
        if (Optional.ofNullable(jsonStr).isPresent()) {
            logger.info("return query results :{}" , jsonStr);
        } else {
            logger.info("query is not found!");
        }
    }


    /**
     * 查询所有数据
     */
    @Test
    public void matchAllQuery() {
        if (!judgeIndexExists("mytest")) {
            logger.info("该索引【mytest】不存在!");
            return;
        }
        QueryBuilder query = QueryBuilders.matchAllQuery();
        SearchResponse response = client.prepareSearch("mytest").setQuery(query).execute().actionGet();
        for (SearchHit searchHit : response.getHits()) {
            String jsonStr = searchHit.getSourceAsString();
            logger.info("return query results :{}" , jsonStr);
        }
    }
}

使用http://elasticsearch所在ip地址:9200/mytest/test/_search查看也可使用elasticsearch head插件与kibana进行查看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值