我正在尝试使用SolrJ索引和搜索来自Solr核心的文档。 Solr核心在无模式模式下运行。
我有以下bean来索引:
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;
...
}
为文档编制索引时,它会在托管架构中创建multiValued
字段strings
:
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
中动态创建多值字段集:
<field name="category" type="strings"/>
<field name="description" type="strings"/>
<field name="name" type="strings"/>
当在搜索之后尝试获取bean时抛出异常:
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.1
和solr-solrj-5.5.0.jar
。
答案 0 :(得分: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
..默认情况下,在添加字段时,multivalued为false,因此您不需要添加,但如果这样做,请将"multiValued":false
附加到内部JSON结构。