Last active
May 2, 2021 06:46
-
-
Save thetekst/307e9c2c8d9657a8610c628dc2f2ce50 to your computer and use it in GitHub Desktop.
Elasticsearch. Spring Boot 2. LocalDateTime converter for document's field. Data parser
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package ru.tkachenko.app.config; | |
import com.fasterxml.jackson.databind.DeserializationFeature; | |
import com.fasterxml.jackson.databind.ObjectMapper; | |
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; | |
import lombok.RequiredArgsConstructor; | |
import org.elasticsearch.client.Client; | |
import org.elasticsearch.common.settings.Settings; | |
import org.elasticsearch.common.transport.TransportAddress; | |
import org.elasticsearch.transport.client.PreBuiltTransportClient; | |
import org.springframework.beans.factory.annotation.Autowired; | |
import org.springframework.beans.factory.annotation.Value; | |
import org.springframework.context.annotation.Bean; | |
import org.springframework.context.annotation.Configuration; | |
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate; | |
import org.springframework.data.elasticsearch.core.EntityMapper; | |
import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories; | |
import java.io.IOException; | |
import java.net.InetAddress; | |
import java.net.UnknownHostException; | |
/** | |
* @author d.tkachenko | |
*/ | |
@Configuration | |
@RequiredArgsConstructor | |
@EnableElasticsearchRepositories(basePackages = "ru/tkachenko/app/data/repository/elastic") | |
public class ElasticsearchConfig { | |
@Value("${elasticsearch.host}") | |
private String host; | |
@Value("${elasticsearch.port}") | |
private int port; | |
@Value("${spring.data.elasticsearch.cluster-name}") | |
private String clusterName; | |
@Bean | |
public Client client() throws UnknownHostException { | |
final var settings = Settings.builder() | |
.put("cluster.name", clusterName) | |
.put("client.transport.ignore_cluster_name", false) | |
.put("client.transport.sniff", true) | |
.build(); | |
return new PreBuiltTransportClient(settings) | |
.addTransportAddress(new TransportAddress(InetAddress.getByName(host), port)); | |
} | |
@Bean | |
public ElasticsearchTemplate elasticsearchTemplate() throws UnknownHostException { | |
return new ElasticsearchTemplate(client(), new ElasticCustomEntityMapper()); | |
} | |
private class ElasticCustomEntityMapper implements EntityMapper { | |
private ObjectMapper mapper; | |
@Autowired | |
private ElasticCustomEntityMapper() { | |
this.mapper = new ObjectMapper(); | |
mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); | |
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); | |
mapper.registerModule(new JavaTimeModule()); | |
} | |
@Override | |
public String mapToString(Object object) throws IOException { | |
return mapper.writeValueAsString(object); | |
} | |
@Override | |
public <T> T mapToObject(String source, Class<T> clazz) throws IOException { | |
return mapper.readValue(source, clazz); | |
} | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package ru.tkachenko.app.data.model.elastic; | |
import lombok.Data; | |
import lombok.ToString; | |
import org.springframework.data.annotation.Id; | |
import org.springframework.data.elasticsearch.annotations.Document; | |
import org.springframework.data.elasticsearch.annotations.Field; | |
import org.springframework.data.elasticsearch.annotations.FieldType; | |
import ru.tkachenko.app.data.model.db.HandbookType; | |
import java.io.Serializable; | |
import java.time.LocalDateTime; | |
/** | |
* @author d.tkachenko | |
*/ | |
@Data | |
@ToString | |
@Document(indexName = "handbook", type = "handbook_type", shards = 1) | |
public class HandbookElastic implements Serializable { | |
private static final long serialVersionUID = -6953745395805907581L; | |
private static final String DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss"; | |
@Id | |
private Long id; | |
private String name; | |
private HandbookType type; | |
// @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DATE_FORMAT) | |
// @Field(type = FieldType.Date, format = DateFormat.custom, pattern = DATE_FORMAT) | |
@Field(type = FieldType.Date) | |
private LocalDateTime created; | |
// @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DATE_FORMAT) | |
// @Field(type = FieldType.Date, format = DateFormat.custom, pattern = DATE_FORMAT) | |
@Field(type = FieldType.Date) | |
private LocalDateTime updated; | |
private Boolean readOnly; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package ru.tkachenko.app.data.repository.elastic; | |
import org.springframework.data.domain.Page; | |
import org.springframework.data.domain.Pageable; | |
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; | |
import ru.tkachenko.app.data.model.elastic.HandbookElastic; | |
/** | |
* @author d.tkachenko | |
*/ | |
public interface HandbookElasticRepository extends ElasticsearchRepository<HandbookElastic, Long> { | |
Page<HandbookElastic> findByName(String name, Pageable pageable); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment