pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
application.yml
server:
port: 8082
spring:
data:
elasticsearch:
cluster-nodes: 127.0.0.1:9300
cluster-name: Test Cluster
注意:
1、缺少9300和cluster-name配置报错
'elasticsearchTemplate' that could not be found.
2、127.0.0.1:9300必须本地跑,否则就ngrok/nginx
NoNodeAvailableException[None of the configured nodes are available
不是client.transport.sniff=true的问题,换TransportClient一样错误,也不是版本冲突问题
代码
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;
@SpringBootApplication
@EnableElasticsearchRepositories
public class EsPluginApplication {
public static void main(String[] args) {
SpringApplication.run(EsPluginApplication.class, args);
}
}
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.GeoPointField;
import org.springframework.data.elasticsearch.core.geo.GeoPoint;
@Document(indexName = "person", type = "person")
public class Person {
@Id private Long id;
private Date dateTime;//默认转long类型
private String lastName;
private String firstName;
private GeoPoint geoPoint;
@GeoPointField private MyGeoPoint myGeoPoint;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public GeoPoint getGeoPoint() {
return geoPoint;
}
public void setGeoPoint(GeoPoint geoPoint) {
this.geoPoint = geoPoint;
}
public MyGeoPoint getMyGeoPoint() {
return myGeoPoint;
}
public void setMyGeoPoint(MyGeoPoint myGeoPoint) {
this.myGeoPoint = myGeoPoint;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", lastName='" + lastName + '\'' +
", firstName='" + firstName + '\'' +
", geoPoint=" + geoPoint +
", myGeoPoint=" + myGeoPoint +
'}';
}
public static class MyGeoPoint {
private double lat;
private double lon;
public double getLat() {
return lat;
}
public void setLat(double lat) {
this.lat = lat;
}
public double getLon() {
return lon;
}
public void setLon(double lon) {
this.lon = lon;
}
@Override
public String toString() {
return "MyGeoPoint{" + "lat=" + lat + ", lon=" + lon + '}';
}
}
}
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
public interface PersonRepository extends ElasticsearchRepository<Person, Long> {}
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.elasticsearch.core.geo.GeoPoint;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/repo")
public class ElasticsearchRepositoryController {
@Autowired
private PersonRepository personRepository;
@GetMapping("/init")
public Long initPerson() {
final Person person = new Person();
person.setId(42L);
person.setFirstName("John");
person.setLastName("Doe");
GeoPoint geoPoint = new GeoPoint(12.34, 56.78);
person.setGeoPoint(geoPoint);
Person.MyGeoPoint myGeoPoint = new Person.MyGeoPoint();
myGeoPoint.setLat(43.21);
myGeoPoint.setLon(87.65);
person.setMyGeoPoint(myGeoPoint);
return personRepository.save(person).getId();
}
}