Solr.Net查询:Windows窗体中的ArgumentException

所以我有一个Windows窗体项目启动并运行。 它使用Lucene.Net库,我做了一个Lucene索引。 该程序接受用户请求,通过一些algorithm运行它们,并将结果集显示在DataGridView中。

之后,我安装了XAMPP,使用Tomcat服务来设置Solr 3.6.1。 我configurationschema.xml如下(感谢可以通过Solr加载一个原始的Lucene索引? ):

<fieldType name="tdouble" class="solr.TrieDoubleField" precisionStep="0" omitNorms="true" positionIncrementGap="0"/> [...] <field name="LuminaireId" type="string" indexed="true" stored="true"/> <field name="LampCount" type="tdouble" multiValued="true" indexed="true" stored="true" required="false"/> [...] 

我search了一些如何设置所有东西的例子,并提出了一个用于映射值的Product-Class(有更多的值,但是为了得到这个图片就足够了,我想)就像这样:

 public class SolrProduct { [SolrUniqueKey("LuminaireId")] public string LuminaireId { get; set; } [SolrField("LampCount")] public ICollection<double> LampCount { get; set; } } 

一个简单的testing查询(使用这个方法)

 internal override List<KeyValuePair<Int64, Double>> CalculateRanking(List<T> checkedAttributes) { Startup.Init<SolrProduct>("http://localhost:8983/solr/"); var solr = ServiceLocator.Current.GetInstance<ISolrOperations<SolrProduct>>(); var results = solr.Query("LampCount:1"); // as is: no mapping for result-return for now, returning "null" instead return(null); } 

产生一个ArgumentException,告诉我“System.Collections.ArrayList”types的对象不能被转换为“System.String”types。 即使在互联网上search这个问题并debugging程序后,我仍然不理解exception。 “LampCount”是一个多值字段(Lucene索引中的前一个NumericField),在Product.cs中应该有schema.xml和mapping。

它可以在localhost:8983 / solr / admin /上使用web界面,我可以将查询作为“LampCount:1”进行拍摄,并返回一堆正确发现的文档。 这可能是另一个问题,但是所有“按原样安装”,Solr web界面的结果集XML显示(在每个find的文档中):

 <arr name="LampCount"> <str>ERROR:SCHEMA-INDEX-MISMATCH,stringValue=1</str> </arr> 

我用Lucene索引文件索引了LampCount字段

  var valueField = new NumericField(internalname, Field.Store.YES, true); valueField.SetDoubleValue(value); doc.Add(valueField); 

难道这就是问题所在,因为我目前看不到大局,感觉完全失败了。 非常感谢,如果你能解开我的brainknot。 😉

提前致谢!

您的模式和POCO之间存在不匹配。 基本上,Solr试图将“tdouble”字段类型转换为您的集合。 你可以做的最好的事情是在管理控制面板中执行你的查询,然后观察回来的内容,然后问你自己如何处理打印回你的POCO。