我对lucene的值大于某个值的值有一个问题查询。我的数据是动态的,因此Linq不是一个选项。
简而言之,这个问题是当我查询Greaterthan的情况下,即使我的资产。Data的价格大于价值,我将获得零结果。这也适用于Greaterthanorequals,Wherelessthan和WherelessThanoreQuals。public class AssetDataSearch : AbstractIndexCreationTask<Asset>
{
public AssetDataSearch()
{
Map = (docs) =>
from d in docs
select new
{
DataType = d.DataType,
_ = d.SearchableParameters.Select(s => CreateField(s.Key, s.Value))
};
}
}
public class Test
{
public void TestMethod()
{
var assets = new []
{
new Asset()
{
ID = Guid.NewGuid().ToString(),
Data = new ListingData()
{
Beds = 5,
Baths = 5,
ListingType = ListingTypeEnum.Condo,
Price = 100
}
},
new Asset()
{
ID = Guid.NewGuid().ToString(),
Data = new ListingData()
{
LotSize = 55,
SqFeet = 89,
YearBuilt = 1965,
Price = 200
}
},
};
RavenHelper.InitTestingStore();
using (var session = RavenDB.RavenUtility.OpenSession())
{
foreach(var a in assets)
session.Store(a);
session.SaveChanges();
var assetsInDb = session.Advanced.LuceneQuery<Asset>().WaitForNonStaleResults().ToArray();
var n = session.Advanced.LuceneQuery<Asset, AssetDataSearch>().WhereEquals("Price", 100).ToArray(); // returns expected results
var gt = session.Advanced.LuceneQuery<Asset, AssetDataSearch>().WhereGreaterThan("Price", 60).ToArray(); // returns nothing
var lt = session.Advanced.LuceneQuery<Asset, AssetDataSearch>().WhereLessThan("Price", 60).ToArray(); // returns nothing
}
}
}
我在做什么错?
我在Raven Google组中找到了答案。事实证明,我必须使用与数据相同的数据类型查询。因此,在这种情况下,由于"价格"是十进制,我必须将60m传递给Where子句:
var gt = session.Advanced.LuceneQuery<Asset, AssetDataSearch>().WhereGreaterThan("Price", 60M).ToArray();