7

さまざまなタイプの動的フィールドを持つsolrスキーマがあります。たとえば、schema.xmlには次のものがあります。

<dynamicField name="*_s" type="string" indexed="true"  stored="true"/>
<dynamicField name="*_i" type="int"    indexed="true"  stored="true"/>
<dynamicField name="*_l" type="long"   indexed="true"  stored="true"/>
<dynamicField name="*_f" type="float"  indexed="true"  stored="true"/>
<dynamicField name="*_d" type="double" indexed="true"  stored="true"/>

そして、SolrJ アノテーション付き POJO を使用してこれらのフィールドにアクセスしたいと考えています。次のように、POJO のデータ型ごとに異なる Map 参照を使用できることはわかっています。

...
@Field("*_s")
public Map<String, String> strings;

@Field("*_i")
public Map<String, Integer> integers;
...

しかし、すべての動的フィールドを同じマップに格納することは可能ですか? 私は次のようなことを考えていました:

...
@Field("*_s")
@Field("*_i")
public Map<String, Object> dynamicFields;
...

SolrJ、POJO、動的フィールドについて私が見つけた唯一のドキュメントは、古い機能リクエストです: https://issues.apache.org/jira/browse/SOLR-1129

4

1 に答える 1

10

@Field アノテーションの「パターン」値の一致は、schema.xml の内容と一致する必要はありません。そこで、doc クラスでマップを定義しました。

@Field("*DF")
private Map<String, Object> dynamicFields;

次に、schema.xml では、dynamicFields に「DF」で後置されたパターンがあります。

<dynamicField name="*_sDF" type="string" indexed="true" stored="true"/>
<dynamicField name="*_siDF" type="sint" indexed="true" stored="true"/>
<dynamicField name="*_tDF" type="date" indexed="true" stored="true"/>

現在、異なる値の型を持つすべての dynamicField は、solrServer.addBean(doc) と solrResponse.getBeans(Doc.class) を使用して格納および取得されます。これは Solr 3.2.0 の場合です。1.4 では機能しませんでした。

于 2011-06-08T23:39:44.630 に答える