如何将 `Searchkick.multi_search` 与 `with_highlights` 一起使用?未定义的方法`with_highlights'
How to use `Searchkick.multi_search` along with `with_highlights`? undefined method `with_highlights'
我们正在尝试通过进行单个批量搜索来优化我们的搜索请求,因此我们正在尝试使用 Searchkick.multi_search
。但是,它仅 returns Searchkick::Query
将结果填充在 results
属性中,作为常规 Array
.
然后,现在如果我尝试 results.with_highlights...
它会失败
undefined method `with_highlights' for #<Array:0x000055a82a7440f0>
或者如果我尝试 search_query.with_highlights
它会失败
undefined method `with_highlights' for #<Searchkick::Query:0x00007f47c5d0cde8>
如何在使用multi_search
时获取高光?
Searchkick 4.6.1+
的更新答案
在此处 https://github.com/ankane/searchkick/pull/1518 与 Searchkick 的 Ankane 进行了交谈。他最终发布了一个修复此问题的新版本,然后此处的原始答案仅对 Searchkick 版本 4.6.0 有效。
对于 4.6.1+ 只需执行:
groups = Group.search(query, execute: false)
users = User.search(query, execute: false)
Searchkick.multi_search([groups, users])
highlighted_groups_results = groups.with_highlights(...
...
4.6.0 的原始答案-
知道了!
深入研究 Searchkick 代码库并检查 Searchkick::Query
实现后,发现 execute
方法正是我所需要的。
def execute
@execute ||= begin
begin
response = execute_search
if retry_misspellings?(response)
prepare
response = execute_search
end
rescue => e # TODO rescue type
handle_error(e)
end
handle_response(response)
end
end
handle_response(response)
正是我们使 with_highlights
工作所需要的。
然后我的最终实现如下所示:
groups = Group.search(query, execute: false)
users = User.search(query, execute: false)
Searchkick.multi_search([groups, users])
# execute here won't do any additional requests as it's already cached in an instance variable @execute
highlighted_groups_results = groups.execute.with_highlights(...
...
我们正在尝试通过进行单个批量搜索来优化我们的搜索请求,因此我们正在尝试使用 Searchkick.multi_search
。但是,它仅 returns Searchkick::Query
将结果填充在 results
属性中,作为常规 Array
.
然后,现在如果我尝试 results.with_highlights...
它会失败
undefined method `with_highlights' for #<Array:0x000055a82a7440f0>
或者如果我尝试 search_query.with_highlights
它会失败
undefined method `with_highlights' for #<Searchkick::Query:0x00007f47c5d0cde8>
如何在使用multi_search
时获取高光?
Searchkick 4.6.1+
的更新答案在此处 https://github.com/ankane/searchkick/pull/1518 与 Searchkick 的 Ankane 进行了交谈。他最终发布了一个修复此问题的新版本,然后此处的原始答案仅对 Searchkick 版本 4.6.0 有效。
对于 4.6.1+ 只需执行:
groups = Group.search(query, execute: false)
users = User.search(query, execute: false)
Searchkick.multi_search([groups, users])
highlighted_groups_results = groups.with_highlights(...
...
4.6.0 的原始答案-
知道了!
深入研究 Searchkick 代码库并检查 Searchkick::Query
实现后,发现 execute
方法正是我所需要的。
def execute
@execute ||= begin
begin
response = execute_search
if retry_misspellings?(response)
prepare
response = execute_search
end
rescue => e # TODO rescue type
handle_error(e)
end
handle_response(response)
end
end
handle_response(response)
正是我们使 with_highlights
工作所需要的。
然后我的最终实现如下所示:
groups = Group.search(query, execute: false)
users = User.search(query, execute: false)
Searchkick.multi_search([groups, users])
# execute here won't do any additional requests as it's already cached in an instance variable @execute
highlighted_groups_results = groups.execute.with_highlights(...
...