Searchkick Elastic搜索行为等条件

时间:2016-02-05 19:05:17

标签: ruby-on-rails elasticsearch ruby-on-rails-4.2 searchkick

将Rails 4.2与searchkick和elasticsearch配合使用,我们在设置条件时可以找到用户:

where_data = {
  region: "North America"
}
results = Person.search( query, where: where_data )

这可以按预期工作,并在Person.region是"北美"时找到一个人。

但在其他情况下,这个人有多个地区,包括北美:"非洲;北美"。在这些情况下,找不到此人。

如何自定义数据或调用的位置,以便它在sql中更像LIKE,并查找完整字符串的任何匹配实例?

3 个答案:

答案 0 :(得分:3)

您可以传递而不是散列数组。 所以你可以:

where_data = [
  "region LIKE North America"
]
results = Person.search( query, where: where_data )

这样where子句将使用LIKE来查找结果。

答案 1 :(得分:2)

要搜索某个地区包含"北美"的人,请先尝试:

Person.search "North America", fields: [:region]

如果这不起作用,请尝试将其添加到人物模型:

class Person < ActiveRecord::Base
  searchkick word_middle: [:region]

然后(在重新索引之后)

Person.search "North America", fields: [:region], match: :word_middle

如果仍然无效,我建议您在ES中制作:region个收藏品(如果您有兴趣,请告诉我,在使用searchkick之前我已做过此操作但不记得确切的代码。我可以把它拉起并稍后发给你)

答案 2 :(得分:0)

我不熟悉Searchkik,但我是每日弹性用户。我认为,如果你提交了一个区域选项的空格分隔字符串,它将匹配它们。

option_string  = array_of_options.join(" ")

使用带有elasticsearch-rails gems的JSON语法,你应该能够做到这一点。

where_data = {
  region: option_string
}
results = Person.search( query, where: where_data )