【发布时间】:2018-02-17 14:07:34
【问题描述】:
我正在尝试创建一个查询,用户可以在其中搜索品牌字段等于某个字符串的 ES 文档。这是我目前拥有的查询,但没有过滤。我正在将 elasticsearch-rails 与 Ruby on Rails 一起使用。
@products = Product.search(
query:{
function_score:{
query: {
multi_match: {
fields: ['brand^5', '_all'],
query: "#{query}",
fuzziness: "AUTO"
}
},
field_value_factor:{
field: "popularity",
modifier: "log1p"
}
}
}).page(page).per(25)
出于测试目的,我已为过滤器静态分配了品牌名称。在这种情况下,用户应该会看到品牌名称为“NordicTrack”的搜索关键字的结果。
query:{
function_score:{
query: {
multi_match: {
fields: ['brand^5', '_all'],
query: "#{query}",
fuzziness: "AUTO"
}
},
filter: {
term: {"brand":"NordicTrack"}
},
field_value_factor:{
field: "popularity",
modifier: "log1p"
}
}
}
).page(page).per(25)
这个查询给了我以下错误:
[400] {"error":{"root_cause":[{"type":"parsing_exception","reason":"no [query] registered for [filter]","line":1,"col":139}],"type":"parsing_exception","reason":"no [query] registered for [filter]","line":1,"col":139},"status":400}
我不确定为什么这不起作用。任何帮助将不胜感激!
【问题讨论】:
-
很奇怪,它应该可以工作。你的弹性搜索版本是什么?你可以试试
term: {brand: 'NordicTrack'}作为过滤器吗?
标签: ruby-on-rails ruby elasticsearch ruby-on-rails-5 elasticsearch-rails