Действительно, вам нужно отправить запрос непосредственно в Elastic Search. Ниже приведен код, который я использовал:
import groovyx.net.http.ContentType
import groovyx.net.http.Method
import org.apache.commons.lang.StringUtils
import org.apache.commons.lang.math.NumberUtils
import groovyx.net.http.HTTPBuilder
...
def suggestion = params.query
def http = new HTTPBuilder('http://localhost:9200/_suggest')
http.request(Method.POST, ContentType.JSON) {
body = [
'suggestion': [
'text': params.query,
'term': ["field": "_all"]
]
]
response.success = { resp, json ->
json?.suggestion?.each { s ->
def oldWord = s?.text
def newWord = s?.options[0]?.text ?: oldWord
suggestion = StringUtils.replace(suggestion, oldWord, newWord)
}
}
response.failure = { resp ->
flash.error = "Request failed with status ${resp.status}"
}
}
searchResult.suggestedQuery = suggestion
Обратите внимание, что это отрывок. Кроме того, я выполняю фактический поиск, а затем добавляю атрибут offerQuery к карте searchResult.
Выполните HTTP POST для службы _suggest, работающей с Elastic Search. В моем примере это было простое веб-приложение, работающее на одном сервере, поэтому с локальным хостом все было в порядке. Формат запроса — объект JSON, основанный на Elastic Search документация.
У нас есть два обработчика ответов — один для успеха, другой для ошибок. Мой обработчик успеха перебирает каждое слово, для которого было дано предложение, и выбирает лучшее (первое) предложение для каждого, если оно есть. Если вы хотите увидеть необработанные данные, вы можете временно добавить println(json)
.
И последнее замечание: при добавлении классов httpBuilder в проект вам, вероятно, потребуется исключить несколько уже предоставленных артефактов. А именно:
runtime('org.codehaus.groovy.modules.http-builder:http-builder:0.5.1') {
excludes 'xalan'
excludes 'xml-apis'
excludes 'groovy'
}
person
Domenic D.
schedule
18.02.2015