Searchkick Elastic Search 条件如行为
Searchkick Elastic Search where condition like behavior
使用带有 searchkick 和 elasticsearch 的 Rails 4.2,我们设置了一些 where 条件来查找用户:
where_data = {
region: "North America"
}
results = Person.search( query, where: where_data )
这按预期工作并在 Person.region
为 "North America" 时找到了一个人。
但也有其他情况,此人有多个地区,包括北美:"Africa; North America"。在这些情况下,找不到人。
如何自定义 where 数据或调用,使其更像 sql 中的 LIKE
,并找到完整字符串的任何匹配实例?
我对 Searchkik 不熟悉,但我是 elastic 的日常用户。我认为,如果您提交了 space 分隔的区域选项字符串,它将匹配所有选项。
option_string = array_of_options.join(" ")
将 JSON 语法与 elasticsearch-rails gems 结合使用,您应该能够实现这一目标。
where_data = {
region: option_string
}
results = Person.search( query, where: where_data )
要搜索区域包含 "North America" 的人物,首先尝试:
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 之前已经这样做了,但不记得确切的代码。我可以把它拉出来 post 稍后给你)
您可以传递数组而不是散列。
所以你可以拥有:
where_data = [
"region LIKE North America"
]
results = Person.search( query, where: where_data )
这样 where 子句将使用 LIKE 来查找您的结果。
使用带有 searchkick 和 elasticsearch 的 Rails 4.2,我们设置了一些 where 条件来查找用户:
where_data = {
region: "North America"
}
results = Person.search( query, where: where_data )
这按预期工作并在 Person.region
为 "North America" 时找到了一个人。
但也有其他情况,此人有多个地区,包括北美:"Africa; North America"。在这些情况下,找不到人。
如何自定义 where 数据或调用,使其更像 sql 中的 LIKE
,并找到完整字符串的任何匹配实例?
我对 Searchkik 不熟悉,但我是 elastic 的日常用户。我认为,如果您提交了 space 分隔的区域选项字符串,它将匹配所有选项。
option_string = array_of_options.join(" ")
将 JSON 语法与 elasticsearch-rails gems 结合使用,您应该能够实现这一目标。
where_data = {
region: option_string
}
results = Person.search( query, where: where_data )
要搜索区域包含 "North America" 的人物,首先尝试:
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 之前已经这样做了,但不记得确切的代码。我可以把它拉出来 post 稍后给你)
您可以传递数组而不是散列。 所以你可以拥有:
where_data = [
"region LIKE North America"
]
results = Person.search( query, where: where_data )
这样 where 子句将使用 LIKE 来查找您的结果。