springboot 1.5.10 elasticsearch 6.1.3 的 集成

Elasticsearch是用Java开发的,是当前流行的企业级搜索引擎。广泛用于云计算中,能够达到近实时搜索。 与springboot 集成也是非常方便的。具体步骤如下:

1.添加maven依赖

        <properties>
                <elasticsearch.version>6.1.3</elasticsearch.version>
	    </properties>

         <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>${elasticsearch.version}</version>
        </dependency>

        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>transport</artifactId>
            <version>${elasticsearch.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>

2 在application.properties 中添加elasticsearch的配置信息

#es
elasticsearch.host=192.168.0.108
elasticsearch.port=9300
elasticsearch.clustername=test-elasticsearch

3 创建elasticsearch配置类

@Configuration
@ConfigurationProperties(prefix = "elasticsearch")
public class MyESConfig {


    private String host;

    private String port;

    private String clustername;

    public String getHost() {
        return host;
    }

    public void setHost(String host) {
        this.host = host;
    }

    public String getPort() {
        return port;
    }

    public void setPort(String port) {
        this.port = port;
    }

    public String getClustername() {
        return clustername;
    }

    public void setClustername(String clustername) {
        this.clustername = clustername;
    }

    @Bean
    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;
    }
}

配置代码已经准备好了。下面就开始 使用TransportClient 对elasticsearch集群操作了。 对es集群的操作分为:index的操作,type 的操作,document的操作,搜索操作。

4 index 、type的操作

    //注入transportClient
   @Autowired
    private TransportClient client;

    //拿到索引管理
    public static IndicesAdminClient getAdminClient() {
        return client.admin().indices();
    }

  
     //创建索引
    public static boolean createIndex(String indexName, int shards, int replicas) {
        Settings settings = Settings.builder()
                .put("index.number_of_shards", shards)
                .put("index.number_of_replicas", replicas)
                .build();
        CreateIndexResponse createIndexResponse = getAdminClient()
                .prepareCreate(indexName.toLowerCase())
                .setSettings(settings)
                .execute().actionGet();
        return createIndexResponse.isAcknowledged()?true:false;
    }


    //删除索引
    public static boolean deleteIndex(String indexName) {
        DeleteIndexResponse deleteResponse = getAdminClient()
                .prepareDelete(indexName.toLowerCase())
                .execute()
                .actionGet();
        return deleteResponse.isAcknowledged()?true:false;
    }

5 document的操作

  1. 添加文档
//添加文档 
 public boolean putDocument(){

        ElasticUtil.client = this.client;
        try {
            XContentBuilder doc = jsonBuilder()
                    .startObject()
                    .field("id", "1")
                    .field("title", "springboot es 的集成")
                    .field("content", "springboot es 的集成的步骤是啥 啥 啥")
                    .field("date", "2018-03-27 17:27:00")
                    .endObject();

            System.out.println(doc.toString());
            response = client.prepareIndex("myindex", "mytype", "1")
                .setSource(doc)
                .get();
            System.out.println(response.status());
            return true;
        }catch (IOException e){
            e.printStackTrace();
            return false;
        }
    }
  1. 获取文档
public String getDocument(){
       ElasticUtil.client = this.client;
       GetResponse response =client.prepareGet("myindex","mytype","1").get();
       return response.getSourceAsString();
   }
  1. 删除文档
public String deleteDocument(){

        ElasticUtil.client = this.client;
        DeleteResponse response=client.prepareDelete(("myindex","mytype","1").get();
        String result = "id: "+ response.getId().toString() +"status: "+ response.status().toString();
        return result;
    }
  1. 更新文档
 public String updateDocument() throws IOException, ExecutionException, InterruptedException {
        ElasticUtil.client = this.client;
        UpdateRequest request=new UpdateRequest();
        request.index("myindex")
                .type("mytype")
                .id("1")
                .doc(
                        jsonBuilder().startObject()
                                .field("content","修改后的 springboot es 的集成的步骤是啥 啥 啥")
                                .endObject()
                );
        UpdateResponse response=client.update(request).get();
        String status = response.status().toString();
        String type = response.getType().toString();
        String id = response.getId().toString();
        long version = response.getVersion();
        String result = "status: "+ status+" type:  "+ type + " id:  "+ id +" version:  "+ version;
        return result;
    }

6 document 的搜索

 @ResponseBody
    public List<Map<String,Object>> searchCourseWithKeyWord(@RequestParam(value = "keyWord", required = true) String keyWord){

        List<Map<String,Object>> hitsMap = new ArrayList<>();
        QueryBuilder queryBuilder = QueryBuilders.multiMatchQuery(keyWord,"title","content");
        SearchResponse response = client.prepareSearch("myindex")
                .setQuery(queryBuilder)
                .setSize(500)
                .get();
        SearchHits hits=response.getHits();

        for(SearchHit hit:hits){
            Map<String,Object> map=hit.getSourceAsMap();
            hitsMap.add(map);
        }
        return hitsMap;
    }

转载于:https://my.oschina.net/nxxYqmvPOvsfH/blog/1785756

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值