首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >作为多值从查询返回的单值字段。

问作为多值从查询返回的单值字段。
EN

Stack Overflow用户
提问于 2015-10-25 18:30:00
回答 1查看 2.2K关注 0票数 2

我使用Solr.NET索引数据,然后在本地Solr服务器上查询数据(Solr.net v0.4,Solrv5.3.1),并得到奇怪的异常。

我的索引记录是一个简单的类(在这里简化):

代码语言:javascript
复制
public class Record
{
    [SolrUniqueKey]
    public long Id {get;set;}

    [SolrUniqueKey]
    public string Data {get;set;}
}

通过调用ISolrOperations.Add()将其添加到索引中。我没有事先定义模式-它是由我输入的数据自动生成的。

在其他地方,我使用ISolrReadOnlyOperations.Query()查询这个索引,只询问Id字段。此查询显然返回结果,但使用ArgumentException崩溃:

“无法将值'System.Collections.ArrayList‘转换为文档类型My.Namespace.Record的属性'Id’”

这意味着,当我将Id属性存储为long时,它将作为ArrayList of longs进行检索。如果我试图检索其他字段,我会得到相同的错误--我存储一个字符串,但是检索它们的集合。这会崩溃,因为它试图创建一个Record实例,其中Id属性是单个long。

通过web界面浏览索引显示,该属性实际上是多值的--我看到的JSON包含一个用于所有属性的数组。同样,在模式浏览器中,我可以看到我的字段被定义为多值(对于Properties和Schema,而不是索引)。在索引的托管模式文件中,我可以看到我的字段被定义为strings (用于字符串字段)或tlongs (用于数字字段)。

  1. 为什么Solr (或Solr.Net)将我的单值字段索引为多值?
  2. 如果不手动编辑架构,我可以防止这种情况发生吗?也许是使用了字段属性?
  3. 我能否仅检索多值属性的单个值,因此如果无法修复架构,我可以简单地将数据检索到我的单值Record对象中。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-26 13:11:45

我找到了解决办法和解决办法。

  1. Solr5.3.1中的新索引/核心,如果没有显式地给出solrconfig.xml文件,就复制在<solr dir>\server\solr\configsets\data_driven_schema_configs\conf中找到的默认文件。该文件定义了一个updateProcessRequestChain,它定义了在没有架构的情况下添加新文档时会发生什么。默认情况下,在其中定义的类型是多值的: <processor class="solr.AddSchemaFieldsUpdateProcessorFactory"> <str name="defaultFieldType">strings</str> <lst name="typeMapping"> <str name="valueClass">java.lang.Long</str> <str name="valueClass">java.lang.Integer</str> <str name="fieldType">tlongs</str> </lst> </processor>

注意strings和tlongs数据类型。为了防止这种情况,您可以更改核心的solrconfig.xml文件夹中的conf,以使用单值数据类型(string、tlong等),或者更改新创建的核心的默认值。

  1. 解决方法是将结果读取为Dictionary<string,object>,而不是让Solr.NET将结果反序列化为文档对象。

这意味着为该类型初始化第二个Solr操作对象:

代码语言:javascript
复制
   Startup.Init<Record>(indexUrl); // Typed
   Startup.Init<Dictionary<string, object>>(indexUrl); // Untyped.

然后,获取ISolrOperations<Dictionary<string,object>>的一个实例,并从其中手动读取Key和Data属性,将object有效负载转换为ArrayList并提取值。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33333380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档