我目前正在尝试将Solrnet与正在研究的项目集成在一起,甚至无法让Solrnet从填充的POCO中生成文档。以下是我正在使用的POCO的示例

public class Person : ICustomInterface
{
    [SolrField("text")]
    public string ContactNumber { get; set; }

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

    [SolrField("text")]
    public string ContactEmail { get; set; }
    [SolrField("text")]
    public string FamilyName { get; set; }
    [SolrField("text")]
    public string GivenName { get; set; }
    [SolrField("text")]
    public string MiddleName { get; set; }
    [SolrField("text")]
    public string Title { get; set; }
    [SolrField("text")]
    public string Gender { get; set; }
    [SolrField("text")]
    public string PlaceOfBirth { get; set; }
    [SolrField("text")]
    public string CountryOfBirth { get; set; }

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


我在尝试使用以下代码对上面的内容进行索引之前,先调用init函数。

Startup.Init<Person>("http://localhost:8080/solr-4.1.0");


然后,我调用以下内容尝试对对象进行索引。

var solr = ServiceLocator.Current.GetInstance<ISolrOperations<Person>>();
solr.Add(mypoco);
solr.Commit();


在'solr.Add(person)'上的错误是:“文档缺少必需的uniqueKey字段:id”。查看正在发送的http请求,这很有意义,请求的主体为:<add><doc /></add>

似乎没有任何领域。进一步研究,“ AttributesMappingManager”返回0个结果。方法在下面,我从“ GetPropertiesWithAttribute”中看到了注释结果。

var props = type.GetProperties(BindingFlags.Instance | BindingFlags.Public); //returns properties correctly
var kvAttrs = props.Select(prop => new KeyValuePair<PropertyInfo, T[]>(prop, type.GetCustomAttributes<T>())); // correct number of keys of properties with Solrnet attributes, but values are empty
var propsAttrs = kvAttrs.Where(kv => kv.Value.Length > 0); // 0 results
return propsAttrs; // 0 results


我尝试将其分解为一个测试项目,但仍然遇到相同的问题。我尝试过有无接口,但仍然没有运气。我可能缺少一些非常简单的东西,但是很想知道它是什么。

注意:我正在使用github repository中最新版本的Solrnet

更新资料
测试了'SampleSolrApp'解决方案,修复了一些引用(在'HomeController.cs'中找不到SolrNet.DSL,似乎缺少SolrNet.DSL引用,从已编译的github存储库中添加了引用),示例似乎已正确初始化,文章通过Application_Start上的AddInitialDocuments()方法获取“ exampledocs”。但是,在收到错误消息“字典中不存在给定的密钥”后不久,这种方法就起作用了。在“ HtmlHelperMapperExtensions.cs”中。 “产品”对象确实具有正确的属性,具有映射器正在寻找的字段名称,但找不到任何字段(在这种情况下为“ cat”)。这符合我遇到的问题,因为它没有为solr构建有效的http请求,因为它似乎无法找到SolrField属性。

要在另一台PC上测试样本,以查看此问题是否与我的开发环境有关。任何意见或建议,将不胜感激。

更新2
在另一个开发环境上进行了测试,但出现了同样的错误。因此,即使在示例中,似乎GetCustomAttributes扩展方法也不会返回pocos上的属性。我正在VS 2012(.net 4.5,在示例项目中以3.5为目标),Win7机器上的IIS Express上运行示例。希望有人可以指出正确的方向进行进一步调查。

最佳答案

首先,不确定您为什么会收到“文档缺少必需的uniqueKey字段:id”错误,因为您似乎已经正确装饰了Id属性。由于没有显示如何创建mypoco对象,因此我将检查您是否设置了Id属性(因为需要提供Id属性(且Id必须是唯一的,因为Solr不会自动分配该ID))。另外,我注意到您正在将所有其他字段映射到架构中的text字段。这不是完成此行为的标准做法。通常,您需要将POCO上的每个属性映射到架构中的单独字段(有关示例,请参见SolrNet项目页面上的Mapping),然后在架构中使用copyField指令将所有单个字段移至架构中。通用文本字段。这样一来,您就可以在组合的text字段或单个字段中进行搜索,并在各个字段上启用诸如突出显示和刻面等选项。

请签出Documents, Fields and Schema Design以获取有关设置自己的自定义字段和使用copyField的更多详细信息。此外,由于您具有来自GitHub的SolrNet源代码,因此建议您运行并检查SampleSolrApp目录中的代码,以更好地了解SolrNet。您可以通过源父目录中的runsample.bat启动示例。

关于c# - Solrnet找不到SolrField属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15823665/

10-10 04:41