将Rails 4.2与searchkick和elasticsearch配合使用,我们在设置条件时可以找到用户:
where_data = {
region: "North America"
}
results = Person.search( query, where: where_data )
这可以按预期工作,并在Person.region
是"北美"时找到一个人。
但在其他情况下,这个人有多个地区,包括北美:"非洲;北美"。在这些情况下,找不到此人。
如何自定义数据或调用的位置,以便它在sql中更像LIKE
,并查找完整字符串的任何匹配实例?
答案 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 )