elasticsearch 无法查询 ruby 中的路径
elasticsearch unable to query path in ruby
我有一个 elasticsearch 索引 'events' - 在该索引中有一个类型 'event'.
事件对象有一个 'venue',它有各种属性,包括 'name' - 所以简化的结构是:
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" : {} }}'
工作正常,所以我猜这只是错误的查询结构。
我试过切换 single/double 引号,尝试更严格地遵循此页面上的示例:
https://www.elastic.co/guide/en/elasticsearch/guide/current/denormalization.html
都无济于事,想知道是否有其他人遇到过这种情况,并可以建议如何在 ruby 中解决这个问题。
您尝试传递给搜索功能的 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(例如,上面的代码片段没有正确转义提交值中的特殊字符)
我有一个 elasticsearch 索引 'events' - 在该索引中有一个类型 'event'.
事件对象有一个 'venue',它有各种属性,包括 'name' - 所以简化的结构是:
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" : {} }}'
工作正常,所以我猜这只是错误的查询结构。
我试过切换 single/double 引号,尝试更严格地遵循此页面上的示例:
https://www.elastic.co/guide/en/elasticsearch/guide/current/denormalization.html
都无济于事,想知道是否有其他人遇到过这种情况,并可以建议如何在 ruby 中解决这个问题。
您尝试传递给搜索功能的 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(例如,上面的代码片段没有正确转义提交值中的特殊字符)