1

DataImportHandlerデータベースにインデックスを付けるように構成していますが、この問題に遭遇しました。

別のテーブルへのfkであるnull許容整数フィールドFを持つテーブルAがあります(Bと呼びます)。私はこのようにモデリングしていました:

...
<entity name="main" query="select ..., F from A">
  ...
  <entity name="sub" query="select ... form B where Id = ${main.F}">
    ...
  </entity>
<entity>
...

問題は、F が NULL の場合、${main.F} が何も置き換えられず、次のクエリを実行しようとするため、実行時エラーが発生することです。

select ... from B where Id =

この状況を処理する方法はありますか?

4

3 に答える 3

1

「WHERE F is NOT NULL」を使用できない理由はありますか?

または、sql で immedate を使用して F を未使用の値に置き換えることもできます。

OnError =SKIP の使用は "WHERE F is NOT NULL" に似ていますが、SQL で IF を使用して未使用の値に置き換えると、必要に応じて、esub 部分のみを無視してメイン部分にインデックスが作成されます。

于 2011-09-23T09:00:52.077 に答える
0

記録のために、これは私が現在使用しているソリューションです。

サブエンティティの定義を次のように変更しました。

<entity name="sub" query="select ... form B where Id = '${main.F}'">

F は文字列ではなく数値フィールドであり、' で囲むと一部のデータベースで問題が発生する可能性があるため、これは最善の解決策ではありません (Oracle ではパフォーマンスの問題)。

于 2011-12-20T17:05:17.467 に答える
0

私たちは dataimport ハンドラーを使用していますが、率直に言って、このシナリオにはまだ遭遇していません。
エンティティで onError 属性を試してみてください。これにより、エラーが発生したときにスキップまたは続行できます。

http://wiki.apache.org/solr/DataImportHandler#Configuration_in_data-config.xml

于 2011-09-23T08:12:50.250 に答える