Solr 8.8.2での分散インデックスクエリのエラー

トピック作成者:ks-solruserml-bot (2024/05/28 20:33 投稿)
2
CloseClose

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

こんにちは、

Solr 8サーバーへの分散インデックスクエリで、クラスター外のシャード(異なるSolrバージョンのもの)がshardsリストに指定されているとクエリが失敗する現象を観察したことがある人はいますか?なお、シャードのホワイトリストは無効になっています。このタイプのクエリは、Solr 6.4.2と7.7.3の組み合わせでは機能しますが、Solr 8.8.2サーバーでは機能しません。

Solr 8サーバーでの失敗した分散インデックスクエリ(Solr 8およびSolr 7のシャードを含む):

http://localhost:8828/solr/techproduct_882/select?q=*%3A*&shards=http://localhost:8828/solr/techproduct_882_shard1_replica_n1,http://localhost:8828/solr/techproduct_882_shard2_replica_n2,http://localhost:7738/solr/techproduct_773_shard1_replica_n1

{
"responseHeader":{
"zkConnected":true,
"status":500,
"QTime":108,
"params":{
"q":"*:*",
"shards":"http://localhost:8828/solr/techproduct_882_shard1_replica_n1,http://localhost:8828/solr/techproduct_882_shard2_replica_n2,http://localhost:7738/solr/techproduct_773_shard1_replica_n1"}},
"error":{
"metadata":[
"error-class","org.apache.solr.common.SolrException",
"root-error-class","java.io.IOException"],
"msg":"org.apache.solr.client.solrj.SolrServerException:
IOException occured when talking to server at: null",
"trace":"org.apache.solr.common.SolrException:
org.apache.solr.client.solrj.SolrServerException: *IOException occured
when talking to server at: null*
    at org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:477)
    at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:216)
    at

上記の呼び出しの前に、シャードホワイトリストを更新または無効にするように促されます:

http://localhost:8828/solr/techproduct_882/select?q=*%3A*&shards=http://localhost:8828/solr/techproduct_882_shard1_replica_n1,http://localhost:8828/solr/techproduct_882_shard2_replica_n2,http://localhost:7738/solr/techproduct_773_shard1_replica_n1

{
  "responseHeader":{
    "status":403,
    "QTime":5,
    "params":{
      "q":"*:*",
      "shards":"http://localhost:8828/solr/techproduct_882_shard1_replica_n1,http://localhost:8828/solr/techproduct_882_shard2_replica_n2,http://localhost:7738/solr/techproduct_773_shard1_replica_n1"}},
  "error":{
    "metadata":[
      "error-class","org.apache.solr.common.SolrException","root-error-class","org.apache.solr.common.SolrException"],
    "msg":"The 'shards' parameter value 'http://localhost:8828/solr/techproduct_882_shard1_replica_n1,http://localhost:8828/solr/techproduct_882_shard2_replica_n2,http://localhost:7738/solr/techproduct_773_shard1_replica_n1' contained value(s) not on the shards whitelist. shardUrl:http://localhost:8828/solr/techproduct_882_shard1_replica_n1.* set -Dsolr.disable.shardsWhitelist=true *to disable shards whitelist checks",
    "code":403}}

Whitelistを無効にしてSolr 8サーバーを起動する場合(このフラグを有効にすると、上記の最初のエラーが発生します):

bin/solr start -c -p 8828 -Dsolr.disable.shardsWhitelist=true -z localhost:2181/solr8828

ありがとうございます。
Mattt

返信投稿者:ks-solruserml-bot (2024/05/28 20:33 投稿)

Hi Mattt,

興味深いユースケースですが、Solrは公式に異なるバージョン間での分散検索をサポートしていますか?そうだとは思いません。なぜなら、正常に動作しない場合があるからです。

  • Solr 8から、HttpShardHandlerFactoryは古いSolrサーバーと通信できないhttp2を使用しています。
  • 一部のフィールドタイプは、Luceneレベルで異なるSolrバージョンと互換性がないため、ソート用のフィールド値を比較する際に問題が発生する可能性があります。たとえば、日付フィールドタイプの場合、古いLuceneではjava.util.Dateを使用していたかもしれません(間違っていたらすみませんが、これは単なる例です)。一方、最新のLuceneではlongを使用している場合、そのフィールドでソートしようとすると実行時エラーが発生します。

Koji

返信投稿者:ks-solruserml-bot (2024/05/28 20:33 投稿)

Thanks Koji!

この情報は役立ちます。この種のクエリを異なるバージョン間で考慮する必要があることは、心の奥にわかっていたと思います。あなたの例は、その点をはっきりと示しています。

私が実験の一環として述べたように、Solr 6/7間で(シンプルな例のテックプロダクトスキーマとソーティングなしで)クエリを機能させることができましたが、Solr 6にクエリを送信するとSolr 6と8の両方で機能することができました。Solr 8サーバーにクエリを行うと失敗する理由が理解できませんでした。HttpShardHandlerFactoryがhttp2を使用するSolr 8の場合、私が見ている失敗を説明しているようです。

Matt

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

KandaSearch

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

投稿の削除

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