1

現在、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 秒以上かかります。これをさらに高速化する方法や、何が間違っているのかわかりません。

4

2 に答える 2

1

order_idフィールドの分析を に切り替えるとどうなり:keywordますか? から:

indexes :order_id,      type: 'string', index: :not_analyzed

に:

indexes :order_id,      type: 'string', index: :keyword

ドキュメントは言う:

ストリーム全体を単一のトークンとして「トークン化」するキーワード タイプのアナライザー。これは、郵便番号、ID などのデータに役立ちます。

に当てはまるようですorder_id

于 2012-12-27T17:01:11.120 に答える
1

クエリでファセットを使用していない場合は、クエリをフィルター処理されたクエリに変換し、用語フィルターをトップ レベルからフィルター処理されたクエリのフィルターに移動することをお勧めします。エラスティック クエリのパフォーマンスも参照してください。

于 2012-12-27T20:26:38.320 に答える