1
lucene을 사용하여 특정 값보다 큰 값을 쿼리하는 데 문제가 있습니다. 내 데이터는 동적이므로 Linq는 옵션이 아닙니다.WhereGreaterThan은 LuceneQuery (RavenDB)에서 결과를 반환하지 않습니다.
간단히 말해서 문제는 Asset.Data의 가격이 값보다 큰 경우에도 WhereGreaterThan을 사용하여 쿼리를 수행 할 때 제로 결과가 발생한다는 것입니다. 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