我们目前正在运行一个具有 2 个索引的 2 节点弹性搜索集群,它的性能非常好(750k 文档和 1110 万文档)。
我们现在正在尝试添加一个包含 3540 万个文档的新索引,但搜索性能很慢。一个术语过滤器大约需要 2 秒才能返回。
映射:
tire do
mapping _routing: { required: true, path: :order_id } do
indexes :id, type: 'string', index: :not_analyzed
indexes :order_id, type: 'string', index: :not_analyzed
[:first_name, :last_name, :company_name, :title, :email, :city, :state_region_province, :postal_code].each do |attribute|
indexes attribute, type: 'string', analyzer: 'keyword'
end
indexes :metadata, type: 'string'
indexes :clicks, type: 'integer', index: :not_analyzed, include_in_all: false
indexes :view_count, type: 'integer', index: :not_analyzed, include_in_all: false
indexes :sender, type: 'boolean', index: :not_analyzed, include_in_all: false
indexes :bounced, type: 'boolean', index: :not_analyzed, include_in_all: false
indexes :unsubscribed, type: 'boolean', index: :not_analyzed, include_in_all: false
end
end
搜索:
Model.tire.search(load: true, page: page, per_page: per_page, routing: order_id) do |search|
search.query do
match :metadata, query, type: 'phrase_prefix', max_expansions: 10
end if query.present?
search.filter :term, order_id: order_id
search.filter :term, sender: false
end
我正在做的搜索只是指定要过滤的 order_id;返回结果大约需要 2 秒。我该如何加快速度?
编辑: 我现在正在索引 user_id 并将其用作路由路径。我创建了一个包含 30 个分片的新索引来测试过度分配。
编辑 2: 使用 30 个分片,索引性能更高,但仍然需要一秒钟才能返回第一个查询的数据。我不确定如何加快速度或我做错了什么。