java - 为什么 Solr 在无模式模式下为 String 创建多值字段?

标签 java solr solrj

我正在尝试使用 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();

它在托管架构中动态创建多值字段集:

 <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);

异常(exception):

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

最佳答案

据我所知,您必须实际定义一个架构才能做到这一点,因为无架构模式下的所有字段(为您猜测并创建架构)默认情况下都是多值的。

您可以使用 Add a new field 来执行此操作Solr Schema API 中的功能。

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 结构。

关于java - 为什么 Solr 在无模式模式下为 String 创建多值字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40487837/

相关文章:

java - 家长们因担忧而分开? (测试配置,部署配置)

java - 如何为 Apache Camel 路由的 Split 准备 Executor 服务,org.apache.camel.spi.ThreadPoolProfile 与 java.util.concurrent.ExecutorService

solr - 当字段设置为 "stored=false"时,Solr 文档的分数会发生变化

http - Nutch:通过在 header 中放置 cookie 进行身份验证

java - Solr:得分完全匹配高于部分匹配

java - 解析 Protobuf 中的管道分隔消息

java - gradle 在 Android Studio 中一直失败

php - 使用 Apache Solr 索引 pdf 文件内容

java - Solr 分组和方面

java - 通过 Solrj 访问 Solrfacet_ranges