Solr(v9.6.1)でのインデックス作成とクエリ処理を最適化するための、より良い方法を見つけるための支援が必要です | KandaSearch Community Support Forum

Solr(v9.6.1)でのインデックス作成とクエリ処理を最適化するための、より良い方法を見つけるための支援が必要です

トピック作成者:ks-solruserml-bot (2025/07/17 11:06 投稿)
2
OpenOpen

(The bot translated the original post https://lists.apache.org/thread/nr38wctrf5lr1j34c985rp625qqfokwo into Japanese and reposted it under Apache License 2.0. The copyright of posted content is held by the original poster.)

みなさん、こんにちは。

私たちのインデックスには、サプライヤーとその製品に関するデータが含まれており、これをフロントエンドで検索リクエストに応じて表示しています。


例:

サプライヤーID:678 に対して、インデックスには以下の 2 製品が登録されています。

product-id(ユニーク)

document1:

{
  "product-id": 123,
  "product-price": 2000,
  "product-name": "ジュートバッグ",
  "supplier-id": 678,
  "company-name": "BagFactoryLimited"
}

document2:

{
  "product-id": 863,
  "product-price": 4500,
  "product-name": "トロリーバッグ",
  "supplier-id": 678,
  "company-name": "BagFactoryLimited"
}

ご覧のとおり、インデックス内の各ドキュメントには、

  • 製品の詳細(product-id, product-price, product-name
  • サプライヤーの詳細(supplier-id, company-name

が含まれています。


問題1:(インデックス時)

サプライヤーに関連するフィールド(例えば会社名など)に変更があった場合、サプライヤーのすべての製品を再インデックスしています。
ただし、サプライヤーに関するデータはすべての製品で同じです。

参考までに:
私たちは1日あたり約 5億(5Cr) 件のドキュメントを再インデックスしています。

→ 冗長なデータのインデックスを避けられるような、より良い最適化方法があれば教えていただきたいです。


問題2:(クエリ実行時)

現在のインデックスからクエリでデータを取得する際、1つのサプライヤーにつき最も関連性の高い製品を1つだけ表示しています。
(たとえ1つ以上のドキュメントがマッチしたとしても)

このために、collapse querysupplier-id フィールドに対して使っています(ドキュメント間の関係がわからないため)。
※ただし、これは非常にリソース負荷が高いです。

例:

fq={!collapse field=supplier-id}

参考までに:
私たちは1日あたり約 250万(25 Lakh) 件のクエリを処理しています。

→ 上記のような負荷の高いクエリを避け、検索応答を最適化できるような、より良いインデックス構成があれば教えていただきたいです。


当社の Solr インフラ情報:

  • Solr バージョン: 9.6.1
  • ノード数: 8
  • シャード数: 62
  • ノードごとのヒープサイズ: 12GB
  • ノードごとのRAM: 50GB
  • ノードごとのCPUコア数: 16
  • ドキュメント数: 約 20億(20Cr)
  • インデックスサイズ: 約 250GB
  • ルーティング: implicit

よろしくお願いいたします。
Uday Kumar
Product Search Tech

返信投稿者:ks-solruserml-bot (2025/07/17 11:07 投稿)

{!join mode=score max} を使って、製品(prods)からサプライヤー(supplier)へのクエリ時の結合を試してみると良いかもしれません。

クエリ時に結合することで、サプライヤーの再インデックスの負担を軽減できます。
その結果、スコア付きでトリミングされたサプライヤーのページが得られますが、製品のヒット情報は完全に失われます

その後、[subquery] トランスフォーマーを使って、再度サプライヤーごとに製品を検索することができますが、これは 1 件ずつ処理するため 非常に遅くなります。

この問題を解決するには、subquery 呼び出しをまとめて処理できるようにするなど、カスタム開発が必要になるようです。
たとえば:

  • subquery の一括処理(bulking)
  • カスタムの {!join} 実装
  • あるいは最終的には SOLR-7830 の完全実装

といった対応が必要になるかもしれません。

--
よろしくお願いします、
Mikhail Khludnev

返信投稿者:ks-solruserml-bot (2025/07/17 11:07 投稿)

ありがとう、Mikhail。
確認してみます。

よろしくお願いいたします。
Uday Kumar

トピックへ返信するには、ログインが必要です。

KandaSearch

Copyright © 2006-2025 RONDHUIT Co, Ltd. All Rights Reserved.

投稿の削除

この投稿を削除します。よろしいですか?