2013-12-18 33 views
0

我使用Solr 4.6与Jetty和作为客户端最新的solrnet版本(1672)。我没有对solrconfig.xml或schema.xml做任何更改,因为我需要的只是文档的内容和标识。我的班级:Solr重点错误

public class Register 
{ 
    [SolrUniqueKey("id")] 
    public string Id { get; set; } 

    [SolrField("content")] 
    public string Content { get; set; } 

    [SolrField("text")] 
    public string Text{get;set;} 
} 

我将文档插入Solr的用代码:

using (FileStream fileStream = File.OpenRead(filePath)) 
      { 
       var response = 
        Solr.Extract(
         new ExtractParameters(fileStream, txtId.Text) 
         {        
          ExtractFormat = ExtractFormat.Text, 
          ExtractOnly = false, 

         });    

          } 

      Solr.Commit(); 

我的问题是,我不能让亮点工作。我对highlightning代码:

QueryOptions options = 
new QueryOptions{Highlight = new HighlightingParameters{Fields = new[] {"id", "content", "text"}}}; 
       SolrQueryByField query = new SolrQueryByField("text", "nhibernate"); 
       var res = Solr.Query(query, options); 

在执行第三行我收到一个错误:

{“无法转换值‘System.Collections.ArrayList’文档类型SolrTest的特性‘内容’ .Register“}

这里有什么问题?我遵循this link

回答

2

你的问题是,在默认的schema.xml文件中,content字段是用multiValued=true定义的。告诉Solr在单个文档中允许该字段有多个值,例如以数组形式存储。因此,你需要在你的注册类来更改内容属性如下:

[SolrField("content")] 
public ICollection<string> Content { get; set; } 

正如SolrNet Mapping documentation所示。

+0

由于内容字段没有复制到任何地方,我不知道它为什么映射到multiValue属性?我已经在schema.xml中更改了这个,只是删除了multiValued并且很酷。但是,我也同意你的回答。有一件事现在还不清楚:我的查询中有6个亮点。每个突出显示的关键值都存在,但值为空。其实价值应该是文本的片段? – FrenkyB

+1

可能是您的指定字段中没有任何匹配的突出显示。由于您正在查询文本字段(这是来自各种其他字段的copyField目标),因此其他字段可能会驱动查询并且不会在高亮显示中显示。您可以指定“*”作为高亮区域,以查看是否获得任何结果。同时检查突出显示参数http://wiki.apache.org/solr/HighlightingParameters,因为有很多选项需要考虑。另外我会建议最初直接对Solr进行测试,以确保您获得预期的结果。 –