2017-09-13 2 views
0

solrJ 6.6でsolr 6.6を使用しています。私はGsonを使ってjsonオブジェクトで読み込んでいるコードをいくつか持っており、オブジェクトをインデックスできるようにSolrJの注釈があります。私はGsonとSolrJの組み合わせで何か問題を抱えていますが、正確に何がわかりません。動的フィールドは、間違ったフィールド名がsolrにインデックスされてしまうことになります

私の問題は、フィールドの1つがダイナミックフィールドで、SolrJがダイナミックフィールド用に作成するregex値の一部で索引付けされることです。

私が希望したいのは、次のjsonを "id"と "spell_text_en-us"フィールドでsolrに索引付けすることです。

{"id":"abc123", "spell_text_en-us":"abc123"} 

代わりに、solrは "id"と "spell_text _。*"フィールドで終わります。ここで

は、スキーマの抜粋です:Solrのクエリによって返される。ここ

<dynamicField name="spell_text_*" type="spell" indexed="true" stored="true"/> 

は、Solrの文書の例である:ここで

{ 
    "id": "70427-7534088-de", 
    "spell_text_.*": "Getoasteter", 
    "_version_": 1578390437688770600 
} 

は、私は「クラスのストリップダウンバージョンです。メートル使用:

public class ExampleDoc { 
    @SerializedName("id") 
    @Field("id") 
    public String id; 

    @SerializedName(value="spell_text_en-us", 
     alternate={ 
     "spell_text_de", 
     "spell_text_fr" 
     } 
    } 
    @Field("spell_text_*") 
    public String spellText; 
} 

私の仮定は、私がspellTextフィールドが正しく宣言したことで、そのIトンは、このように宣言する必要があります。

@SerializedName(value="spell_text_en-us", 
    alternate={ 
    "spell_text_de", 
    "spell_text_fr" 
    } 
} 
@Field("spell_text_*") 
public Map<String, String> spellText; 

しかし、私は地図としてフィールドを宣言した場合、その後GsonパーサがExampleDocにJSONをデシリアライズすることができません。

提案がありますか?

ありがとうございました! リー

答えて

0

私が質問に記載されている地図を使用するようになっていた。

@Field("spell_text_*") 
public Map<String, String> spellText; 

私はSolrJコードベースに行って、コードは期待していたかを確認するユニットテストを通じて見えました。

次に、JSONからさまざまなspell_textフィールドを読み込み、フィールド名と値でspellTextマップを更新するコードを変更する必要がありました。 Gsonコードを使用するためのドキュメントクラスを1つ作成することにしました(ただし、JsonObject.get( "spell_text_")、SolrInputDocumentの別のクラスを使用できました)

関連する問題