Skip to content

Instantly share code, notes, and snippets.

@jprante
Created December 10, 2016 22:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jprante/cd511083d7ee38beb621adeef3053d3b to your computer and use it in GitHub Desktop.
Save jprante/cd511083d7ee38beb621adeef3053d3b to your computer and use it in GitHub Desktop.
Dates in Elasticsearch 5 with Groovy/Java
@Grab(group='org.elasticsearch.client', module='transport', version='5.0.2')
@Grab(group='org.apache.logging.log4j', module='log4j-core', version='2.6.2')
@Grab(group='org.apache.logging.log4j', module='log4j-api', version='2.6.2')
import org.elasticsearch.action.admin.indices.create.CreateIndexAction
import org.elasticsearch.action.admin.indices.create.CreateIndexRequestBuilder
import org.elasticsearch.action.index.IndexAction
import org.elasticsearch.action.index.IndexRequestBuilder
import org.elasticsearch.action.search.SearchResponse
import org.elasticsearch.action.support.WriteRequest
import org.elasticsearch.client.transport.TransportClient
import org.elasticsearch.common.settings.Settings
import org.elasticsearch.common.transport.InetSocketTransportAddress
import org.elasticsearch.transport.Netty4Plugin
import org.elasticsearch.transport.client.PreBuiltTransportClient
import org.elasticsearch.indices.IndexAlreadyExistsException
import java.time.Instant
import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder
import static org.elasticsearch.index.query.QueryBuilders.matchAllQuery
List<String> hostAndPort = ['localhost:9300']
Settings settings = Settings.builder()
.put("cluster.name", "elasticsearch")
.build()
TransportClient client = new PreBuiltTransportClient(settings, Collections.emptyList())
hostAndPort.each { spec ->
def (host,port) = spec.split(':')
if (!port) {
port = '9300'
}
client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(host), Integer.valueOf(port)))
}
CreateIndexRequestBuilder createIndexRequestBuilder = new CreateIndexRequestBuilder(client, CreateIndexAction.INSTANCE)
.setIndex("test")
.addMapping("test", jsonBuilder().startObject()
.startObject("properties")
.startObject("doc_date")
.field("type", "date")
.field("format", "strict_date_optional_time||epoch_millis")
.field("store", true)
.endObject()
.endObject()
.endObject())
try {
createIndexRequestBuilder.execute().actionGet()
} catch (IndexAlreadyExistsException e) {
}
IndexRequestBuilder indexRequestBuilder = new IndexRequestBuilder(client, IndexAction.INSTANCE)
.setIndex("test")
.setType("test")
.setId("1")
.setSource(jsonBuilder().startObject().field("doc_date", Instant.now()).endObject())
.setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE)
indexRequestBuilder.execute().actionGet()
SearchResponse response = client.prepareSearch()
.setQuery(matchAllQuery())
.addStoredField("doc_date")
.execute().actionGet()
println response
response.hits.hits.each { hit ->
println hit.fields.get("doc_date").value()
Instant instant = Instant.parse(hit.fields.get("doc_date").value())
long millis = instant.toEpochMilli()
println millis
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment