2016-11-08 33 views
1

我正嘗試使用SolrJ從Solr內核索引和搜索文檔。 Solr核心在無模式模式下運行。爲什麼Solr在無模式模式下爲String創建multiValued字段?

我有以下豆指數:

public class Product { 


    @Field("id") 
    private String id; 


    @Field(value="name") 
    private String name; 


    @Field(value="category") 
    private String category; 


    @Field(value="description") 
    private String description; 
    ... 
} 

當索引文件是在管理的架構創建multiValuedstrings

Product p = new Product(); 
p.setId("0001"); 
p.setName("Cat 1"); 
p.setDescription("Description"); 

SolrClient client = new 
HttpSolrClient("http://localhost:8983/solr/product"); 
client.addBean(p); 
client.commit(); 

動態地創建了managed-schema MULT值的字段集:

<field name="category" type="strings"/> 
<field name="description" type="strings"/> 
<field name="name" type="strings"/> 

,並試圖尋找它會拋出異常後拿到豆時:

SolrQuery query = new SolrQuery(); 
query.set("q", "*:*"); 
QueryResponse response = client.query(query); 
List<Product> products = response.getBeans(Product.class); 

例外:

java.lang.IllegalArgumentException: 
Can not set java.lang.String field Product.name to java.util.ArrayList 

我怎樣才能解決這個並Solr的創建單值領域?

我使用的是solr-6.2.1solr-solrj-5.5.0.jar

回答

1

就我所知,您必須真正定義一個模式才能做到這一點,因爲默認情況下,無模式模式中的所有字段(爲您猜測和創建模式)都將被多值化。

您可以通過在Solr Schema API中使用Add a new field功能來完成此操作。

curl -X POST -H 'Content-type:application/json' --data-binary '{ 
    "add-field":{ 
    "name":"category", 
    "type":"strings", 
    "stored":true } 
}' http://localhost:8983/solr/collection/schema 

...添加字段的時候,所以你不應該需要添加多值默認爲false,但如果這樣做,追加"multiValued":false到內部JSON結構。

+0

是的,可以單獨添加字段。但我期望在無模式模式下動態創建字段。看起來像動態創建的字符串字段是多值的(字符串)。 –

+0

在無模式模式下創建的所有字段都創建爲多值。 – MatsLindh

相關問題