簡體   English   中英

elasticsearch無法查詢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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM