searchkick 中 where 条件下的用户下层函数
User Lower Function in where condition in searchkick
@ankane
我如何在 searchkick 的 where 条件
中使用 postgres lower 函数
我有以下查询工作正常
klass.search(@params[:query], fields: [:name,:category_name],where: {or: [[{available_cities_name: "New Yo"},{available_cities_short_name: "NY"}]]}).hits
现在我想使用较低的功能,但出现语法错误
klass.search(@params[:query],
fields: [:name,:category_name],
where: {
or: [ [
{"lower(available_cities_name) = ?", "New Yo"},
{"lower(available_cities_short_name) = ?", "ny"}
]]
}
).hits
我遇到以下语法错误,
SyntaxError: unexpected '}', expecting end-of-input
e_cities_name) = ?", "New Yo"},{"lower(available_cities_shor
谁能告诉我如何在 searchkick 中使用较低的功能?
有两种方法可以将参数传递给您的查询的一部分。第一种是使用哈希语法,例如:{arg_name: 'expected_value'}
,第二种是数组语法:["arg_name = ?", 'expected_value']
您的错误是您正在使用数组语法,但试图将其作为散列传递。即:{"arg_name = ?", 'expected_value'}
这是无效语法。
改为尝试:
klass.search(@params[:query],
fields: [:name,:category_name],
where: {
or: [
["lower(available_cities_name) = ?", "New Yo"],
["lower(available_cities_short_name) = ?", "ny"]
]
}
).hits
甚至只是:
klass.search(@params[:query],
fields: [:name,:category_name],
where: ["lower(available_cities_name) = ? OR lower(available_cities_short_name) = ?", "New Yo", "ny"]
).hits
(注意:所有代码都需要在运行之前进行错误测试)。
Elasticsearch 没有 lower
函数。要解决此问题,您可以索引该字段的小写版本并对其进行查询。
def search_data
{
available_cities_name: available_cities_name,
available_cities_name_lower: available_cities_name.downcase
}
end
@ankane 我如何在 searchkick 的 where 条件
中使用 postgres lower 函数我有以下查询工作正常
klass.search(@params[:query], fields: [:name,:category_name],where: {or: [[{available_cities_name: "New Yo"},{available_cities_short_name: "NY"}]]}).hits
现在我想使用较低的功能,但出现语法错误
klass.search(@params[:query],
fields: [:name,:category_name],
where: {
or: [ [
{"lower(available_cities_name) = ?", "New Yo"},
{"lower(available_cities_short_name) = ?", "ny"}
]]
}
).hits
我遇到以下语法错误,
SyntaxError: unexpected '}', expecting end-of-input e_cities_name) = ?", "New Yo"},{"lower(available_cities_shor
谁能告诉我如何在 searchkick 中使用较低的功能?
有两种方法可以将参数传递给您的查询的一部分。第一种是使用哈希语法,例如:{arg_name: 'expected_value'}
,第二种是数组语法:["arg_name = ?", 'expected_value']
您的错误是您正在使用数组语法,但试图将其作为散列传递。即:{"arg_name = ?", 'expected_value'}
这是无效语法。
改为尝试:
klass.search(@params[:query],
fields: [:name,:category_name],
where: {
or: [
["lower(available_cities_name) = ?", "New Yo"],
["lower(available_cities_short_name) = ?", "ny"]
]
}
).hits
甚至只是:
klass.search(@params[:query],
fields: [:name,:category_name],
where: ["lower(available_cities_name) = ? OR lower(available_cities_short_name) = ?", "New Yo", "ny"]
).hits
(注意:所有代码都需要在运行之前进行错误测试)。
Elasticsearch 没有 lower
函数。要解决此问题,您可以索引该字段的小写版本并对其进行查询。
def search_data
{
available_cities_name: available_cities_name,
available_cities_name_lower: available_cities_name.downcase
}
end