0

У меня есть индекс поиска elasticsearch '- внутри этого индекса есть тип' event '.elasticsearch не может запросить путь в ruby ​​

объекты события имеют место «», который имеет различные свойства, в том числе «имя» - так упрощенная структура:

event { 
    venue { 
    name: "foo" 
    } 
} 

Теперь я использую elasticsearch поручни - все отлично работает для включения в список события, поиск и т. д., используя запрос dsl - но что, если я хочу перечислить все события в месте проведения с определенным именем?

Я предполагаю, что-то, как это должно быть возможно:

Event.search "{ 'query': { 'match': { 'venue.name': '#{params[:v]}' }}} 

, но я получаю следующее сообщение об ошибке:

Elasticsearch::Transport::Transport::Errors::BadRequest 

с последующей значительной трассировкой стеки, который содержит много такого рода вещь:

Was expecting one of:\n \"]\" ...\n \"}\" ...\n ]; 

ParseExceptions предлагает неправильный json - но я не уверен, почему.

Простой поиск

Event.search '{"query" : { "match_all" : {} }}' 

работает отлично, так что я предполагаю, что это просто структура запроса, что это неправильно.

Я попытался переключения одинарные/двойные кавычки, попытался следующее более внимательно пример на этой странице:

https://www.elastic.co/guide/en/elasticsearch/guide/current/denormalization.html

все без толку, спрашивает, если кто-то еще сталкивался с такой ситуацией, и можно предположить, как работать в рубине.

ответ

0

Json, которому вы пытаетесь перейти к функции поиска, не является действительным Json. Вы можете попробовать передать хеш вместо Json функции поиска. Попробуйте следующее:

query_hash = {query: {match: {'venue.name' => params[:v] }}} 
Event.search query_hash 
+0

работает отлично, спасибо - я был уверен, что пробовал это точное решение, но не должен. в любом случае, спасибо – freeloader

0

JSON парсер Elasticsearch не будет использование одиночных кавычек для разделения строк - в то время как может, несколько позже, парсера, это не является частью стандарта.

Вы, конечно, можете их избежать, хотя это делает вещи несколько менее разборчивыми, поэтому использование альтернативной формы процитировать может быть предпочтительнее:

%< {"query": { "match": { "venue.name": "#{params[:v]}"}}} > 

Однако это гораздо лучше, чтобы представить запрос в качестве рубинового хэш и затем, чтобы преобразовать это в json (например, вышеприведенный фрагмент не правильно выдает специальные символы в представленном значении)

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

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