我使用 Solr.NET 来索引数据,然后在本地 Solr 服务器(Solr.net v0.4,Solr v5.3.1)上查询它,并得到奇怪的异常。
我的索引记录是一个简单的类(在这里简化):
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 属性存储为 along
时,它被检索为ArrayList
of longs
。如果我尝试检索其他字段,我会得到相同的错误 - 我存储一个字符串,但检索它们的集合。这会崩溃,因为它正在尝试创建 的实例Record
,其中Id
属性是单个long
。
通过 Web 界面浏览索引显示该属性确实是多值的——我看到的 JSON 包含所有属性的数组。同样,在模式浏览器中,我可以看到我的字段被定义为多值(对于属性和模式,而不是索引)。在索引的托管模式文件中,我可以看到我的字段被定义为strings
(对于字符串字段)或tlongs
数字字段。
- 为什么 Solr(或 Solr.Net)将我的单值字段索引为多值?
- 我可以在不手动编辑架构的情况下防止这种情况发生吗?也许使用字段属性?
- 我可以只检索多值属性的单个值吗?所以如果我无法修复架构,我可以简单地将数据检索到我的单值
Record
对象中吗?