1

luceneで特定の値よりも大きい値をクエリするときに問題が発生します。私のデータは動的であるため、Linqはオプションではありません。

要するに、問題は、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
        }
     }
 }

私は何が間違っているのですか?

4

1 に答える 1

0

私はレイヴンのグーグルグループで答えを見つけました。データと同じデータ型でクエリを実行する必要があることがわかりました。したがって、この場合、「Price」は小数であるため、where句に60Mを渡す必要があります。

var gt = session.Advanced.LuceneQuery<Asset, AssetDataSearch>().WhereGreaterThan("Price", 60M).ToArray();
于 2012-11-08T21:24:59.527 に答える