所以我启动并运行了一个Windows窗体项目。它使用Lucene.Net库,并用它制作了一个Lucene索引。该程序接受用户请求,通过一些算法运行它们并在DataGridView中显示结果集。
之后我安装了XAMPP,使用Tomcat服务设置Solr 3.6.1。我将schema.xml配置如下(感谢Can a raw Lucene index be loaded by Solr?):
<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"/>
[...]
我搜索了一些关于如何设置所有内容的示例,并提出了一个用于映射值的Product-Class(还有更多的值,但是为了获得图片,这就足够了,我认为)像这样:
public class SolrProduct
{
[SolrUniqueKey("LuminaireId")]
public string LuminaireId { get; set; }
[SolrField("LampCount")]
public ICollection<double> LampCount { get; set; }
}
一个简单的测试查询(使用此方法)
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”类型的对象无法转换为“System.String”类型。即使在互联网上搜索该问题并调试程序后,我仍然不理解异常。 “LampCount”是一个multiValued-Field(Lucene索引中的前NumericField),它应该在Product.cs中使用schema.xml和映射。
在localhost:8983 / solr / admin /上使用web界面时,它可以正常工作,我可以将查询作为“LampCount:1”进行查询,并返回一堆正确找到的文档。这可能是另一个问题,但是所有“按原样设置”,Solr Web界面的结果集XML显示(在每个找到的文档中):
<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。 ; - )
提前致谢!
答案 0 :(得分:0)
您的架构和POCO之间存在不匹配。 Solr基本上试图将“tdouble”字段类型转换为您的集合。 你可以做的最好的事情是在管理控制面板中执行你的查询,然后观察回来的内容,然后问问自己,你认为它将如何处理回到你的POCO中。