Solr がインデックス時に空のフィールドでエラーを出す | KandaSearch Community Support Forum

Solr がインデックス時に空のフィールドでエラーを出す

トピック作成者:ks-solruserml-bot (2025/05/29 15:22 投稿)
4
OpenOpen

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

皆さん、こんにちは。

私たちは Solarium-PHP ベースで独自に構築したクローラーを使用しており、Solr にデータを投入しています。
Solr を 9.6.1 から 9.8.0 にアップグレードして以来、クローラーのログにエラーが出るようになりました。
ログには、Solr が「title フィールドが存在しない」と訴えているとあります。
実際には、title フィールドはリクエストの一部に含まれていますが、中身が空なのです。

以下はリクエストボディの一部抜粋です(これを出力するために、Solarium-PHP の適切な場所に var_dump() を挿入しました):

Content-Disposition: form-data; name="literal.publishDate"
Content-Type: text/plain;charset=UTF-8

2023-01-12T10:25:06Z
--00000000000002800000000000000000
Content-Disposition: form-data; name="literal.title"
Content-Type: text/plain;charset=UTF-8

(← 空です)

--00000000000002800000000000000000
Content-Disposition: form-data; name="literal.number"

そして以下がそのレスポンスです:
Error indexing document 14935: wp-content/uploads/loremipsum.pdf: Solr HTTP error: OK (400)

{
  "responseHeader": {
    "status": 400,
    "QTime": 121
  },
  "error": {
    "metadata": [
      "error-class", "org.apache.solr.common.SolrException",
      "root-error-class", "org.apache.solr.common.SolrException"
    ],
    "msg": "[doc=141396] missing required field: title",
    "code": 400
  }
}

PDF ファイルにタイトルが含まれていないのは、技術的でない理由により私の側では修正できません。
それにもかかわらず、アップグレード前は正常に動作していました

スキーマは以下のような JSON データで作成しています。特に title フィールドは以下の通りです:

{
  "name": "title",
  "type": "text_general",
  "stored": true,
  "indexed": true,
  "multiValued": false,
  "required": true
}

このため、ドキュメントはインデックス化されません。


どうすればこの問題を解決できますか?

  • スキーマの JSON データに何か変更を加える必要がありますか?
  • それとも、**空のタイトルを定数の非空文字列に置き換える(クローラー側で対応)**のがよいでしょうか?

required オプションに関するドキュメントには、以下のように書かれていました:

このフィールドに値がないドキュメントを追加しようとした場合、Solr はそれを拒否します。このプロパティのデフォルト値は false です。

この説明が少し曖昧に感じられます。
値がない」とは何を意味しているのでしょうか?
値として空文字列("")がある場合も、「値がない」と見なされるのでしょうか?


どうぞよろしくお願いいたします。
Robert Ehrenleitner(工学学士・哲学修士)

返信投稿者:ks-solruserml-bot (2025/05/29 15:22 投稿)

必須フィールドには空でない値が必要です。私の知る限り、これに対する例外はありません。

ユーザー体験(UX)やエンドユーザーの視点で考えてみてください。
もしドキュメントにタイトルがない、あるいはタイトルが空である場合、ユーザーは何を見て、どうすることを期待するでしょうか?

ユーザーが「何か」を表示されることを期待するなら、
たとえばファイル名やURLなど、適切なデフォルト値やフォールバック値を挿入すべきだと思います。

一方で、ユーザーが何も表示されないことを期待していて(かつ、常にタイトルを提供できるわけではない場合)、
そのときは title フィールドを required(必須)としてマークすべきではありません。

返信投稿者:ks-solruserml-bot (2025/05/29 15:23 投稿)

こんにちは、

返信が早くて助かります。

実は、タイトルのないドキュメントは、古いバージョンの Solarium-PHP を使ってデータを投入している古い Solr のインデックスにも存在していないことが分かりました。
つまり、おそらく Solarium-PHP の新しいバージョンによって、以前から存在していたエラーが表面化しただけで、以前はログにも出ていなかったということかもしれません。
今はその確認まではしたくないのですが。

ちなみに補足として:Solr が返す HTTP ステータスが "400 OK" になっているようですが、これはあまり良くないと思います。
"400 Invalid request" のようにすべきではないでしょうか。

ファイル名を使うというアドバイスは良いアイデアですね。
タイトルが空だった場合には、WordPress で使われる "slug"(スラッグ)か、ファイル名にフォールバックするようクローラーを修正します。

どうぞよろしくお願いいたします。

Mag.phil. Robert Ehrenleitner, BEng.

返信投稿者:ks-solruserml-bot (2025/05/29 15:23 投稿)

こんにちは、

「400 OK」についてですが、私のローカル環境ではそのようなことは発生していません
/update ハンドラーに直接リクエストを送った場合、正しく "Bad Request" のステータス行が返されます

もしかすると、Solarium-PHP 側の問題かもしれませんね?

返信投稿者:ks-solruserml-bot (2025/05/29 15:23 投稿)

これは実際には /extract ハンドラーへのリクエストのように見えます

この挙動を引き起こすコードと一緒に、
以下のリンクで イシューを作成してもらえますか?
👉 https://github.com/solariumphp/solarium/issues

— Thomas

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

KandaSearch

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

投稿の削除

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