現在、2 つのインデックスを持つ 2 ノードの Elasticsearch クラスターを実行しており、見事に機能しています (75 万ドキュメントと 1,110 万ドキュメント)。
現在、3,540 万のドキュメントを含む新しいインデックスを追加しようとしていますが、検索のパフォーマンスが低下しています。用語フィルターが返されるまでに約 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 個のシャードを使用すると、インデックスのパフォーマンスが向上しますが、最初のクエリでデータを返すのに 1 秒以上かかります。これをさらに高速化する方法や、何が間違っているのかわかりません。