Я использую ES в приложении grails 2.5.1.Groovy Elasticsearch Клиент
Мои старые зависимостей являются следующие:
runtime 'org.elasticsearch:elasticsearch:1.3.7'
runtime 'org.elasticsearch:elasticsearch-client-groovy:1.3.2'
Я обновил свои отображения, и моя система ES была изменена на 1.7.1
. следующая зависимость, по всей видимости работает отлично:
runtime 'org.elasticsearch:elasticsearch:1.7.1'
runtime 'org.elasticsearch:elasticsearch-client-groovy:1.3.2'
Я также хочу обновить свою заводную версию клиента. Единственный репозиторий, который я могу найти, следующий: org.elasticsearch:elasticsearch-groovy:1.7.0
Хотя это кажется довольно простой оболочкой вокруг клиента Java, согласно github repository.
В результате этого мой существующий код больше не работает, предоставляя исключение из-за отсутствия GNode и GClient (я также искал репо, чтобы убедиться). НО по эластичной документации эти классы exist. Я пытаюсь google и maven, но не могу найти какой-либо другой репозиторий для groovy-клиента.
Пример ошибки:
unable to resolve class org.elasticsearch.groovy.node.GNode
org.elasticsearch.groovy.node.GNode esnode = ESWrapperService.getNode()
org.elasticsearch.groovy.client.GClient esclient = esnode.getClient()
try {
if ((params.q && params.q.length() > 0) || params.rectype) {
params.max = Math.min(params.max ? params.int('max') : 15, 100)
params.offset = params.offset ? params.int('offset') : 0
def query_str = buildQuery(params,field_map)
def search = esclient.search{
indices grailsApplication.config.aggr.es.index ?: "default"
source {
from = params.offset
size = params.max
sort = params.sort?[
("${params.sort}".toString()) : [ 'order' : (params.order?:'asc') ]
] : []
query {
query_string (query: query_str)
}
facets {
consortiaName {
terms {
field = 'consortiaName'
size = 25
}
}
cpname {
terms {
field = 'cpname'
size = 25
}
}
type {
terms {
field = 'rectype'
}
}
startYear {
terms {
field = 'startYear'
size = 25
}
}
endYear {
terms {
field = 'endYear'
size = 25
}
}
}
}
}
if (search?.response) {
result.hits = search.response.hits
result.resultsTotal = search.response.hits.totalHits
// We pre-process the facet response to work around some translation issues in ES
if (search.response.facets != null) {
result.facets = [:]
search.response.facets.facets.each { facet ->
def facet_values = []
facet.value.entries.each { fe ->
facet_values.add([term: fe.term,display:fe.term,count:"${fe.count}"])
}
result.facets[facet.key] = facet_values
}
}
}
}
else {
log.debug("No query.. Show search page")
}
}
finally {
try {
}
catch (Exception e) {
log.error("problem",e);
}
}
Update
Я только что проверил preface
часть документации, которая указывает на elasticsearch-groovy
хранилище, что делает это еще более запутанным ..
Похоже, я пропустил выпуск для ES 1.7.1 Groovy client. Клиент ES 1.7.0 совместим с ES 1.7.1, поэтому не стесняйтесь, пока он работает с этим, пока я делаю выпуск ES 1.7.1. – pickypg
Критически, ES Groovy 1.4+ был основным переписанием клиента ES Groovy. Такие вещи, как «GNode», больше не существуют в новой базе кода. – pickypg
Правильно, значит, документация устарела? – Giannis