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 来查找您的结果。