elasticsearch,ruby-on-rails-5,searchkick,Ruby On Rails,elasticsearch,Ruby On Rails 5,Searchkick" /> elasticsearch,ruby-on-rails-5,searchkick,Ruby On Rails,elasticsearch,Ruby On Rails 5,Searchkick" />

Ruby on rails searchkick中where条件下的用户降低功能

Ruby on rails searchkick中where条件下的用户降低功能,ruby-on-rails,elasticsearch,ruby-on-rails-5,searchkick,Ruby On Rails,elasticsearch,Ruby On Rails 5,Searchkick,@安康 如何在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 现在我想使用lower函数,但我得到了语法错误 klass.searc

@安康 如何在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
现在我想使用lower函数,但我得到了语法错误

klass.search(@params[:query],
  fields: [:name,:category_name],
  where: {
    or: [ [
      {"lower(available_cities_name) = ?", "New Yo"},
      {"lower(available_cities_short_name) = ?", "ny"}
    ]]
  }
).hits
我发现下面的语法错误

SyntaxError:意外的“}”,应为输入结尾 e_cities_name)=?“,“New Yo”},{”lower(可用城市\u shor)


有人能告诉我如何在searchkick中使用lower函数吗?

有两种方法可以将参数传递给部分查询。第一种是使用哈希语法,例如:
{arg\u name:'expected\u value'}
,第二种是数组语法:
[“arg\u name=?,'expected\u value']

您的错误是您正在使用数组语法,但试图将其作为哈希传递。例如:
{“arg\u name=?”,“expected\u 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

(注意:所有代码在运行前都需要进行bug测试)。

Elasticsearch没有
lower
功能。要解决这个问题,您可以为字段的小写版本编制索引并进行查询

def search_data
  {
    available_cities_name: available_cities_name,
    available_cities_name_lower: available_cities_name.downcase
  }
end

让我试试你的解决方案是的,你是对的。我使用了数组语法。但我认为它工作不正常。因为我有
city\u name=New
city short name=ny
但是当我尝试这个查询时,它给出了相同的结果
klass.search(@params[:query],字段:[:name,:category\u name],其中:[“lower(available\u cities\u name)=?或更低(可用城市名称)=?“,”vzxzjx“,”czbchjzx“])。点击
则不应产生任何与此查询相同的结果。搜索(@params[:query],字段:[:名称,:类别名称],其中:[“更低(可用城市名称)=?或更低(可用城市名称)=?,”,“”).hits您已经克服了语法错误,对吗?您试图挤进注释中的另一个东西可能最好作为一个新问题编写;)是的。谢谢你们的建议。我从我这边解决了这个问题。所以不需要再提出新的问题。谢谢你们的时间和答案:)接受你们的答案而不进行测试,因为我知道你们是天才:)