2016-08-14 3 views
1

Я пытаюсь использовать ElasticSearch с Play 2.3.7 Scala. Я установил эластичный поиск, добавил индекс и запустил его (проверял с помощью завитка). Тем не менее, я изо всех сил пытаюсь заставить упругие инструменты работать внутри игрового контроллера.Elastic4s/PlayFramework - не удалось найти неявное значение для исполняемого параметра

Я создал клиент с помощью простого удаленного URL

val client = ElasticClient.remote("localhost", 9300)  

Затем я пытаюсь выполнить на клиенте.

client.execute { 
    ElasticDsl.index.into("test/test").id(id).fields (
        "title" -> title, 
        "uid" -> uid 
    ) 
} 

Это выполняется внутри действия, но я получаю следующее сообщение об ошибке.

could not find implicit value for parameter executable: com.sksamuel.elastic4s.Executable[com.sksamuel.elastic4s.IndexDefinition,R,Q] 
+0

Вы видели эту проблему, кажется, что ваш client.execute() должен быть обернут в multi def. https://github.com/sksamuel/elastic4s/issues/324 –

+0

Я видел эту проблему, но в этом примере они выполняют два поиска (отсюда и необходимость для multi), где, когда я делаю один индекс, поэтому multi не требуется. Я попытался, несмотря на это, и получил ошибку, чтобы сказать, что multi нельзя использовать с индексом. – Codemwnci

ответ

2

Это, как представляется, вызвано тем, что я не делал полный импорт ElasticDsl следующим

import com.sksamuel.elastic4s.ElasticDsl._ 

, но вместо того, чтобы делать

import com.sksamuel.elastic4s.ElasticDsl 

При импорте полного объекта, он явно вызывает сопутствующие объекты, включая требуемые импликации.

Причина, по которой не требуется полный импорт, объясняется тем, что DSL для эластичности сталкивается с DSL для Anorm, поэтому, извлекая Эластичный код в отдельную функцию и используя импорт внутри определения функции, двусмысленность был удален, и код был способен скомпилировать.

+0

FYI У меня была такая же проблема и 'import com.sksamuel.elastic4s.ElasticDsl._' исправил ее для меня –

+1

Для версии 5.3 у меня была такая же проблема. В http://elastic4s.readthedocs.io/en/latest/src/main/tut/docs/ говорится, что если я создал экземпляр 'TcpClient', мне нужно использовать' com.sksamuel.elastic4s.ElasticDSL. _' импорт. Однако, если я использую HttpClient, мне нужно использовать 'com.sksamuel.elastic4s.http.ElasticDSL._' (позаботьтесь о другом пакете: см. Внутренний ** http **) – andhdo

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

  • Нет связанных вопросов^_^