elasticsearch java demo(新手)

https://www.elastic.co/cn/downloads/?elektra=home&storm=hero  下载地址

 

 

 

 

 

 

 

 

 浏览器查看启动情况,出现一下内容说明服务已启动

 

 

 

 

elasticsearchs是什么

Elasticsearch 是一个分布式的免费开源搜索和分析引擎,适用于包括文本、数字、地理空间、结构化和非结构化数据等在内的所有类型的数据。Elasticsearch 在 Apache Lucene 的基础上开发而成,由 Elasticsearch N.V.(即现在的 Elastic)于 2010 年首次发布。Elasticsearch 以其简单的 REST 风格 API、分布式特性、速度和可扩展性而闻名,是 Elastic Stack 的核心组件;Elastic Stack 是一套适用于数据采集、扩充、存储、分析和可视化的免费开源工具。人们通常将 Elastic Stack 称为 ELK Stack(代指 Elasticsearch、Logstash 和 Kibana),目前 Elastic Stack 包括一系列丰富的轻量型数据采集代理,这些代理统称为 Beats,可用来向 Elasticsearch 发送数据。https://www.elastic.co/cn/what-is/elasticsearch

elasticsearchs能帮我们干什么

https://blog.csdn.net/ctwctw/article/details/105972029

依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>7.6.1</version>
        </dependency>

 

好了,先写个demo体验一下

import lombok.Data;
import org.springframework.data.elasticsearch.core.geo.GeoPoint;

@Data
public class Org {
    private Integer id;
    private String name;
    private GeoPoint location;

    public static final String LOCATION = "location";
}

###注意引用的org.springframework.data.elasticsearch.core.geo.GeoPoint包,别引错了

import com.example.es.entity.Org;
import com.google.gson.Gson;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;
import org.elasticsearch.common.geo.GeoDistance;
import org.elasticsearch.common.unit.DistanceUnit;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.elasticsearch.core.geo.GeoPoint;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import java.io.IOException;

/**
 * @ClassName EsOrgController
 * @Description TODO
 * @Author DELL
 * @Date 2021/4/23 16:20
 **/
@RestController
public class EsOrgController {
    private Logger logger = LoggerFactory.getLogger(getClass());
    @Autowired
    @Qualifier("restHighLevelClient")
    private RestHighLevelClient highLevelClient;


    @GetMapping(value = "/es/create/index1/{name}")
    public String createIndex(@PathVariable(value = "name") String name) throws IOException {
        CreateIndexRequest request = new CreateIndexRequest(name);
        CreateIndexResponse response = highLevelClient.indices().create(request, RequestOptions.DEFAULT);
        logger.info(response.toString());
        return "success";
    }

    @PostMapping(value = "/es/document/create/Org")
    public String createUserDocument(@RequestBody Org org) throws IOException {
        IndexRequest indexRequest = new IndexRequest("org");
        indexRequest.timeout(TimeValue.timeValueSeconds(1));
        /**
         * 使用Gson --
         * GeoPoint传入时传经纬度 --- 使用fastjson会解析错误
         * by https://agentd.cn/archives/es-geopoint
         */
        indexRequest.source(new Gson().toJson(org), XContentType.JSON);
        IndexResponse indexResponse = highLevelClient.index(indexRequest, RequestOptions.DEFAULT);
        return indexResponse.toString();
    }

    /**
     * 根据经纬度查询
     * @param location
     * @return
     * @throws IOException
     */
    @GetMapping(value = "/es/document/OrgBylocation")
    public String getOrgByLocation(@RequestBody GeoPoint location) throws IOException {
        SearchRequest searchRequest = new SearchRequest("org");
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        double lat = location.getLat();
        double lon = location.getLon();
        QueryBuilder queryBuilder = QueryBuilders.geoDistanceQuery(Org.LOCATION)
                .distance(3, DistanceUnit.KILOMETERS).point(lat, lon).geoDistance(GeoDistance.ARC);
        sourceBuilder.query(queryBuilder);
        SearchResponse search = highLevelClient.search(searchRequest, RequestOptions.DEFAULT);
        System.out.println(search);
        return search.toString();
    }


}

先看一下GeoPoint  

public class GeoPoint {
    //纬度
    private double lat;
    //经度
    private double lon;

    private GeoPoint() {
    }

    public GeoPoint(double latitude, double longitude) {
        this.lat = latitude;
        this.lon = longitude;
    }

    public double getLat() {
        return this.lat;
    }

    public double getLon() {
        return this.lon;
    }

    public static GeoPoint fromPoint(Point point) {
        return new GeoPoint(point.getX(), point.getY());
    }

    public static Point toPoint(GeoPoint point) {
        return new Point(point.getLat(), point.getLon());
    }

    public boolean equals(Object o) {
        if (this == o) {
            return true;
        } else if (o != null && this.getClass() == o.getClass()) {
            GeoPoint geoPoint = (GeoPoint)o;
            return Double.compare(geoPoint.lat, this.lat) == 0 && Double.compare(geoPoint.lon, this.lon) == 0;
        } else {
            return false;
        }
    }

    public int hashCode() {
        return Objects.hash(new Object[]{this.lat, this.lon});
    }

    public String toString() {
        return "GeoPoint{lat=" + this.lat + ", lon=" + this.lon + '}';
    }
}

 

 

 

 

 

 浏览器elasticsearch-head插件

 

posted @ 2021-04-23 17:34  Java9527  阅读(349)  评论(0编辑  收藏  举报