Lukeリクエストに対する無効なPHPSレスポンス

トピック作成者:ks-solruserml-bot (2024/09/11 21:41 投稿)
5
OpenOpen

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

こんにちは皆さん、

特定のドキュメントに対するLukeリクエストの出力が、wt=phpsを使用した場合、エラーが含まれているため、PHPで逆シリアライズすることができません。

以下のコマンドを実行しています:

curl "http://localhost:8983/solr/techproducts/admin/luke?id=apple&wt=phps"

出力はこのような構造になっていますが、簡略化のため一部を省略しています。

a:4:{s:14:"responseHeader";a:2:{s:6:"status";i:0;s:5:"QTime";i:1;}s:5:"index";a:0:{}s:3:"doc";a:3:{s:5:"docId";i:7;s:6:"lucene";a:3:{s:2:"id";a:0:{}s:10:"compName_s";a:0:{}s:9:"address_s";a:0:{}}s:4:"solr";i:0;a:3:{s:2:"id";s:5:"apple";s:10:"compName_s";s:5:"Apple";s:9:"address_s";s:28:"1 Infinite Way, Cupertino CA";}}s:4:"info";a:2:{s:3:"key";a:0:{}s:4:"NOTE";s:116:"Document Frequency (df) is not updated when a document is marked for deletion. df values include deleted documents.";}}

この出力では、Solrドキュメントはキー「solr」とフィールドの配列として表現されるべきですが、実際には以下の部分で表されています:

s:4:"solr";i:0;a:3:{s:2:"id";s:5:"apple";s:10:"compName_s";s:5:"Apple";s:9:"address_s";s:28:"1 Infinite Way, Cupertino CA";}

i:0;の部分は本来そこにあるべきではなく、これによりPHPはキー「solr」の値が整数の0であると認識し、その後に配列 a:3: が続くことを予期しないため、処理が失敗します。おそらく、PHPSerializedResponseWriterwriteSolrDocument()が原因であり、常に配列にドキュメントを書き込むことを想定してwriteKey(idx, false);を始めているのではないかと考えています。

Thomas

返信投稿者:ks-solruserml-bot (2024/09/11 21:41 投稿)

こんにちは、Thomas
これは私の専門分野ではありませんが、LukeHandlerやそのphpsとの互換性に問題があるかもしれません。例えば、「solr」キーの下にLuceneのドキュメントを配置していますが、実際にはSolrDocumentではありません(LukeRequestHandler.handleRequestBodyを参照)。
本当に/lukeを使用する必要がありますか?/select/getを使ってドキュメントを取得することはできませんか?

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

返信投稿者:ks-solruserml-bot (2024/09/11 21:41 投稿)

こんにちは、Mikhail

私はSolarium PHPクライアントのためにLuke機能を書きました。ここでは特定のユースケースがあるわけではなく、単に機能を完全にサポートしたいというだけです。

PHPS出力にバグがあることに同意できるなら(JSON出力にはエラーが含まれていません)、この件でJIRAに問題を登録し、クライアントに前方互換の回避策を実装しようと思います。

Thomas

返信投稿者:ks-solruserml-bot (2024/09/11 21:41 投稿)

これは、https://github.com/apache/solr/pull/2114 のようです。実際の出力に「i:0」が見られますが、それが正しいのか間違っているのかは分かりません。

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

返信投稿者:ks-solruserml-bot (2024/09/11 21:42 投稿)

すべての配列要素やSolrドキュメントのフィールドには、数値キーが前置されており、これは順序付きの要素インデックスです。そのため、これらの「i:0」はかなり妥当かもしれません。

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

返信投稿者:ks-solruserml-bot (2024/09/11 21:42 投稿)

おそらく、/like/adminは特定のクライアントAPIの範囲外かもしれません。なぜなら、これは低レベルの内部機能に近く、変更の対象であり、エラーが発生しやすいからです。

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

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

KandaSearch

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

投稿の削除

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