Solrnet找不到SolrField属性
本文关键字:属性 SolrField 找不到 Solrnet | 更新日期: 2023-09-27 18:07:23
我目前正试图将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)'的错误是:"Document is missing mandatory uniqueKey field: 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
我试着把它分解成一个测试项目,仍然得到同样的问题。我试过有界面和没有界面,但仍然没有运气。我可能错过了一些真正的简单的东西,但我很想知道它是什么。
注意:我使用的是最新版本的Solrnet从github存储库
测试了"SampleSolrApp"解决方案,修复了一些参考(找不到SolrNet)。DSL在home controller。cs中,SolrNet。DSL ref似乎缺失,从编译的github repo中添加了引用),样本似乎初始化正确,通过Application_Start上的AddInitialDocuments()
方法发布了"exampledocs"。这是有效的,然而,在我得到错误后不久"给定的键不存在于字典中。"在"HtmlHelperMapperExtensions.cs"。'Product'对象具有映射器正在查找的字段名的正确属性,但是找不到任何字段(在本例中为'cat')。这与我的问题相匹配,因为它没有为solr构建有效的http请求,因为它似乎找不到SolrField属性。
要在另一台PC上测试示例,看看这个问题是否与我的开发环境有关。任何意见或建议将不胜感激。
更新2 在另一个开发环境测试,我得到同样的错误。因此,GetCustomAttributes
扩展方法似乎没有返回pocos 上的属性,即使在样本中也是如此。我在VS 2012 (.net 4.5,在示例项目中针对3.5)上运行示例,在Win7机器上运行IIS Express。希望有人能给我指出正确的方向,以便进一步调查。
首先,不确定为什么会出现"Document missing mandatory uniqueKey field: id"错误,因为您似乎已经适当地装饰了id属性。由于您没有显示如何创建mypoco
对象,因此我将检查您是否正在设置Id属性(因为需要提供Id(并且唯一),而不是由Solr自动分配)。另外,我注意到您正在将所有其他字段映射到模式中的text
字段。这不是完成这个行为的标准做法。您通常会将POCO上的每个属性映射到模式中的单独字段(参见SolrNet项目页面上的映射示例),并使用模式中的copyField
指令将所有单个字段移动到公共文本字段中。这允许您对组合的text
字段或单个字段进行搜索,并启用诸如在单个字段上突出显示和faceting等选项。
请查看文档,字段和架构设计,了解更多关于设置自己的自定义字段和使用copyField的详细信息。此外,由于您有来自GitHub的SolrNet源代码,我建议您运行并检查SampleSolrApp目录中的代码,以便更好地理解SolrNet的工作原理。您可以通过源父目录中的runsample.bat启动示例。
(用户)错误已经解决,一个简单的错误,奇怪的后果。我仍然不确定问题的根本原因是什么,但是我使用的本地编译的dll样本应用程序和我自己的应用程序都是由VS解决方案构建的,不起作用。当我第一次下载build.bat文件时,我遇到了一些麻烦(我一运行它就崩溃了,本地机器有问题,而不是构建脚本),因此我尝试直接从解决方案/项目构建它。
移动到另一台PC上,我从build.bat文件中构建了所有的库,示例应用程序现在可以工作,我的其他应用程序也是如此。
TLDR
从<<p>构建填词strong> Build.bat