2015-08-25 3 views
1

Я использую 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 хранилище, что делает это еще более запутанным ..

+0

Похоже, я пропустил выпуск для ES 1.7.1 Groovy client. Клиент ES 1.7.0 совместим с ES 1.7.1, поэтому не стесняйтесь, пока он работает с этим, пока я делаю выпуск ES 1.7.1. – pickypg

+0

Критически, ES Groovy 1.4+ был основным переписанием клиента ES Groovy. Такие вещи, как «GNode», больше не существуют в новой базе кода. – pickypg

+0

Правильно, значит, документация устарела? – Giannis

ответ

0

Как указано в комментариях, документация устарела. У меня была та же проблема, но с помощью предложения @ pickypg попробовал newer documentation on github, и он сработал.

Смежные вопросы