Untitled
unknown
plain_text
a year ago
3.4 kB
13
Indexable
package com.ericsson.msdp.spg.repositories;
import co.elastic.clients.elasticsearch.ElasticsearchClient;
import co.elastic.clients.elasticsearch._types.mapping.DynamicMapping;
import co.elastic.clients.elasticsearch._types.mapping.Property;
import co.elastic.clients.elasticsearch._types.mapping.SearchAsYouTypeProperty;
import co.elastic.clients.elasticsearch._types.mapping.TypeMapping;
import co.elastic.clients.elasticsearch.core.SearchRequest;
import co.elastic.clients.elasticsearch.core.SearchResponse;
import co.elastic.clients.elasticsearch.core.search.Hit;
import co.elastic.clients.elasticsearch.core.search.TotalHitsRelation;
import co.elastic.clients.util.ObjectBuilder;
import com.ericsson.msdp.spg.model.SiteNode;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.function.Function;
public class SitesRepo extends BaseRepo<SiteNode, SitesRepo> {
public SitesRepo(String nodeIndex, ElasticsearchClient elasticsearchClient) {
super(nodeIndex, elasticsearchClient, SiteNode.class);
}
@Override
protected ObjectBuilder<TypeMapping> indexMapping(TypeMapping.Builder builder) {
Function<Property.Builder, ObjectBuilder<Property>> fn = b -> {
b.searchAsYouType(SearchAsYouTypeProperty.of(a -> a.index(true)));
b.keyword(a -> a.store(true));
return b;
};
Function<Property.Builder, ObjectBuilder<Property>> number = b -> {
b.integer(f -> f.index(true));
return b;
};
return builder.dynamic(DynamicMapping.False)
.properties("id", fn)
.properties("eai_id", number)
.properties("eai_type", number)
.properties("name", fn)
.properties("type", fn)
.properties("subtype", fn)
.properties("region", fn)
.properties("status", fn)
.properties("vendor", fn)
.properties("location", b -> b.geoPoint(g -> g.ignoreZValue(true)))
.properties("attributes.name", fn)
.properties("attributes.value", fn)
.properties("npa_nxx", fn)
.properties("city", fn)
.properties("state_prov", fn);
}
protected List<FieldType> searchableFields() {
return List.of(
new FieldType("name", "string", Collections.emptyMap()),
new FieldType("type", "select", Collections.emptyMap()),
new FieldType("subtype", "select", Collections.emptyMap()),
new FieldType("status", "select", Collections.emptyMap()),
new FieldType("vendor", "select", Collections.emptyMap()));
}
public Optional<SiteNode> queryByName(String siteName) {
try {
Objects.requireNonNull(siteName, "Site name cannot be null");
SearchRequest request = SearchRequest
.of(s -> s.index(getIndexName()).size(10_000).query(q -> q.match(t -> t.field("name").query(siteName))));
SearchResponse<SiteNode> response = getElasticsearchClient().search(request, SiteNode.class);
if (response.hits().total().relation() != TotalHitsRelation.Eq) {
logger.warn("There are more results");
}
return response.hits().hits().stream().map(Hit::source).findFirst();
} catch (Exception e) {
throw new RepositoryException(e);
}
}
public Long lastModifiedTimestamp() {
return null;
}
}
Editor is loading...
Leave a Comment