退休弹性搜索多 table/index 搜索
re-tire elastic search multi table/index search
我正在尝试找出使用 elastic.co 进行多 table 搜索的最佳方法。
特别是,我想知道是否可以为这种搜索方法添加更多索引。
Chapter.rb
def self.search(params)
fields = [:title, :description, :content ]
**tables** = [Chapter.index_name, Book.index_name]
tire.search(**tables**, {load: true,page: params[:page], per_page: 5}) do
query do
boolean do
must { string params[:q], default_operator: "AND" } if params[:q].present?
end
end
highlight *fields, :options => { :tag => '<strong>' }
end
以上示例在没有 Tables 的情况下仍然有效。如何让它与 tables 一起工作?
如果您要添加更多索引,那么您将远离以模型为中心的搜索。这可能没问题,因为我猜你会以不同的方式处理搜索结果,因为它们来自不同的索引。
在这种情况下,我认为你可以这样做:
Tire.search([Chapter.index_name, Book.index_name],
page: params[:page],
... etc ...
) do
query do
... etc ...
end
end
这确实意味着您将无法执行 load: true
之类的操作,因为您已经不知道要为哪个模型加载结果了。
通过深入研究代码 (here),您似乎可以为以模型为中心的搜索指定多个索引。类似于:
tire.search({
index: [Chapter.index_name, Book.index_name],
load: true,
... etc ...
虽然我还没有尝试过,但我怀疑它是否会起作用 - 再次因为一旦涉及多个索引就无法将结果加载到特定模型中。
我正在尝试找出使用 elastic.co 进行多 table 搜索的最佳方法。
特别是,我想知道是否可以为这种搜索方法添加更多索引。
Chapter.rb
def self.search(params)
fields = [:title, :description, :content ]
**tables** = [Chapter.index_name, Book.index_name]
tire.search(**tables**, {load: true,page: params[:page], per_page: 5}) do
query do
boolean do
must { string params[:q], default_operator: "AND" } if params[:q].present?
end
end
highlight *fields, :options => { :tag => '<strong>' }
end
以上示例在没有 Tables 的情况下仍然有效。如何让它与 tables 一起工作?
如果您要添加更多索引,那么您将远离以模型为中心的搜索。这可能没问题,因为我猜你会以不同的方式处理搜索结果,因为它们来自不同的索引。
在这种情况下,我认为你可以这样做:
Tire.search([Chapter.index_name, Book.index_name],
page: params[:page],
... etc ...
) do
query do
... etc ...
end
end
这确实意味着您将无法执行 load: true
之类的操作,因为您已经不知道要为哪个模型加载结果了。
通过深入研究代码 (here),您似乎可以为以模型为中心的搜索指定多个索引。类似于:
tire.search({
index: [Chapter.index_name, Book.index_name],
load: true,
... etc ...
虽然我还没有尝试过,但我怀疑它是否会起作用 - 再次因为一旦涉及多个索引就无法将结果加载到特定模型中。