Sitecore 7 ContentSearch API在筛选器/where条件中具有数字POCO属性不起作用

Sitecore 7 ContentSearch API在筛选器/where条件中具有数字POCO属性不起作用,sitecore,lucene.net,sitecore7,Sitecore,Lucene.net,Sitecore7,我已经花了几个小时在这个问题上,但到目前为止没有运气。因此,向社区寻求帮助 我有一个名为Product的数据模板,其中有一个名为ProPrice的字段,并且基于此模板的一些内容,我已经启用了使用配置true对所有字段进行索引的功能。重建索引时,我会看到索引字段(proprice)以及正确存储在Lucene中的术语(使用Luke验证) 现在我使用Sitecore 7 ContentSearch API从Lucene索引获取内容。为此,我创建了一个名为Product的POCO实体,它继承了Searc

我已经花了几个小时在这个问题上,但到目前为止没有运气。因此,向社区寻求帮助

我有一个名为
Product
的数据模板,其中有一个名为
ProPrice
的字段,并且基于此模板的一些内容,我已经启用了使用配置
true
对所有字段进行索引的功能。重建索引时,我会看到索引字段(
proprice
)以及正确存储在Lucene中的术语(使用Luke验证)

现在我使用Sitecore 7 ContentSearch API从Lucene索引获取内容。为此,我创建了一个名为
Product
的POCO实体,它继承了
SearchResultItem
,并为price添加了一个属性,如下所示:

[IndexField("proprice")]
public double Price { get; set; }
但是,以下LINQ查询不返回任何数据:

var products = context.GetQueryable<Product>().Where(p => p.Price == 4.0).ToList();
因此,当条件与数值相对时,它似乎不起作用。不幸的是,我需要根据数值范围进行过滤,因此上述方法对我不起作用。我可以避免使用ContentSearchAPI,直接使用Lucene提供程序执行Lucene查询,但将来我将无法切换到其他搜索提供程序,例如Solr。或者,我可以获取所有数据,然后在我的代码中进行过滤——不过我不喜欢这样

如果能帮我解决这个问题,我将不胜感激。 附:其他几点: 1) 我在数据模板中尝试了“ProPrice”字段类型,如单行文本、整数、双无
2) 我使用默认的Lucene analyzer-
Lucene.Net.Analysis.Standard.StandardAnalyzer

我想您需要将类型转换器属性添加到字段中。我已经在我的项目中做到了这一点,对数字的过滤效果很好:

因此,将属性更改为:

[IndexField("proprice")]
[TypeConverter(typeof(IndexFieldNumberValueConverter))]
public double Price { get; set; }

您应该能够进行筛选。

您需要将索引字段类型映射到system.double,如下所示(注意type=“system.double”):



谢谢你,艾哈迈德!!它与下面Richard的建议一致。我没有同时尝试这两个选项,因此不起作用。这在没有添加[TypeConverter]属性的情况下对我起作用,因为sitecore支持现成的整数、字符串、双精度等类型。我还能够在不需要TypeConverter的情况下实现这一点(我使用System.Int32)。我也重建了我的索引,但我不知道这是否必要。谢谢Richard!!它与艾哈迈德的建议一致。添加
Sitecore.ContentSearch.LuceneProvider.dll
[IndexField("proprice")]
[TypeConverter(typeof(IndexFieldNumberValueConverter))]
public double Price { get; set; }
<field fieldName="proprice"       storageType="YES" indexType="TOKENIZED"    vectorType="NO" boost="1f" type="System.Double" settingType="Sitecore.ContentSearch.LuceneProvider.LuceneSearchFieldConfiguration, Sitecore.ContentSearch.LuceneProvider">
                <analyzer type="[YOUR ANALYZER]" />
</field>