1
我在使用lucene查詢大於某個值的值時遇到問題。我的數據是動態的,所以Linq不是一種選擇。WhereGreaterThan在LuceneQuery中返回沒有結果(RavenDB)
問題簡而言之就是當我使用WhereGreater查詢時,即使我的Asset.Data的價格大於某個值,我也會得到零結果。這適用於WhereGreaterThanOrEquals,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
}
}
}
我在做什麼錯?
問題是RavenDB將價格值解釋爲字符串,而不是數字。看看[這裏](http://ravendb.net/docs/appendixes/lucene-indexes-usage)。 – eulerfx