[英]Elasticsearch DSL with multiple multi_match query in ruby
[英]elasticsearch unable to query path in ruby
我有一個Elasticsearch索引“事件”-在該索引內有一個“事件”類型。
事件對象具有一個具有各種屬性的“場所”,其中包括一個“名稱”-因此簡化的結構是:
event {
venue {
name: "foo"
}
}
現在,我正在使用elasticsearch-rails-一切都可以很好地用於列出事件,使用查詢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/zh-CN/elasticsearch/guide/current/denormalization.html
所有人都無濟於事,想知道是否有人遇到過這種情況,並可以建議如何在紅寶石中工作。
您嘗試傳遞給搜索功能的Json不是有效的Json。 您可以嘗試將哈希而不是Json傳遞給搜索功能。 請嘗試以下操作:
query_hash = {query: {match: {'venue.name' => params[:v] }}}
Event.search query_hash
Elasticsearch的json解析器不會使用單引號來分隔字符串-雖然某些更高版本的解析器可能會使用,但這不是標准的一部分。
您當然可以轉義它們,盡管這會使事情變得不太清晰,因此使用替代形式的引用可能更可取:
%< {"query": { "match": { "venue.name": "#{params[:v]}"}}} >
但是,最好將查詢表示為ruby哈希,然后將其轉換為json(例如,上面的代碼段不能正確地在提交的值中轉義特殊字符)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.