2016-05-17 11 views
0

私は、SpringアプリケーションでSolr 5.2.1(Dev PC上での単純なスタンドアロンインスタンス)とSolrjの実行を使用しています。Solr TextFieldからJava @Fieldへのマッピング

私はすべてうまく動作しています(Solrj Clientは@Fieldアノテーションでアノテーションされたドメインモデルをコミットして取得できます)。ドメインモデルのフィールドの1つでフリーテキスト検索を使用したいので、タイプを変更しました文字列からテキストフィールドから、私は、solrがすべてを返すか、何も返さないkey:valueペア型検索の代わりに、より自由なテキストのアプローチを可能にすることを理解しています。

のschema.xmlは

<field name="description" type="text_general" indexed="true" stored="true"/> 

のJava Beanのスニペット

public String getDescription() { 
    return description; 
} 

@Field 
public void setDescription(String description) { 
    this.description = description; 
} 

保存側がうまく働いた、私はSolrのヴァイJavaの豆ANS solrjを更新することが可能ですし、使用してスニペットhttpクライアント私はデータが入ってくるのを見ることができますが、私が持っている問題はクエリーの際にJava Beanを取り戻すことができないということです。 Solrは、Beanに値を設定しようとするとString型のセッターが気に入らない。次のエラーが表示されます。

Caused by: org.apache.solr.client.solrj.beans.BindingException: Exception while setting value : [PetShop] on public void search.CompanySummarySolr.setDescription(java.lang.String) 

INFO [stdout] (http-localhost-127.0.0.1-8080-6) at org.apache.solr.client.solrj.beans.DocumentObjectBinder$DocField.set(DocumentObjectBinder.java:447) 

INFO [stdout] (http-localhost-127.0.0.1-8080-6) at org.apache.solr.client.solrj.beans.DocumentObjectBinder$DocField.inject(DocumentObjectBinder.java:430) 

INFO [stdout] (http-localhost-127.0.0.1-8080-6) at org.apache.solr.client.solrj.beans.DocumentObjectBinder.getBean(DocumentObjectBinder.java:64) 

INFO [stdout] (http-localhost-127.0.0.1-8080-6) ... 64 more 

INFO [stdout] (http-localhost-127.0.0.1-8080-6) Caused by: java.lang.IllegalArgumentException: argument type mismatch 

私はエラーを理解していますが、テキストフィールドのマッピング方法はわかりません。 httpクライアントではJson出力はArrayのように見えますが、Solr APIではhttp://lucene.apache.org/solr/5_2_0/solr-core/org/apache/solr/schema/TextField.htmlは配列ではなくオブジェクトを拡張します。

私が見ることができるすべては、私は、エーテルを行う必要性があるが、私は戻ってそれを文字列に得るのですか。その場合には

@Field 
public void setDescription(Object description) { 
    this.description = (???) description; 
} 

などのフィールドがありますか?

または私はorg.apache.solr.schema.TextField

@Field 
public void setDescription(TextField description) { 
    this.description = description.getValueSource(???, ???); 
} 

しかし、私はまた、本当に初心者のために戻って文字列を取得する方法を理解していない、そして第二に、それは私が持っているように見えるを使用することができますTextFieldオブジェクトがSolrjライブラリにないので、solrライブラリ全体をプロジェクトに取り込むことができます。

私は何かを見逃してしまったと確信していますが、他のフィールドはすべて単純にマップされていますが、説明をクライアントに戻して文字列として返す方法の例は見つかりません。ストリングは、私が理解する限り、そのタイプの検索を許可しません。

すべてのヘルプは喜んだから、複数値フィールドにSolrのは、デフォルトのTextFieldを思わ

答えて

0

を高く評価しました。これは、Solrが渡されたStringフィールドを配列でラップすることを意味します。これは、SolrがStringの代わりに1つのStringを返すようにBean Setterを中断させます。

これを修正するには、スキーマを編集するだけです。

<field name="description" type="text_general" indexed="true" stored="true"/> 

これに:

<field name="description" type="text_general" indexed="true" stored="true" multiValued="false"/> 

今Solrの私の場合、説明フィールドは、このことから

を行ってきましたので、明示的にSolrのtext_generalを教えてxmlファイルには、単一の値であります幸い私の応答をコンポーネントのJava Beanに変換します。

関連する問題