2013-05-01 2 views
1

Я пытаюсь реализовать эту факсированную логику поиска: http://ravendb.net/docs/2.0/client-api/faceted-search. Но хиты каждого ценового диапазона, которые возвращаются из базы данных, не работают должным образом; все хиты сгруппированы по последнему ценовому диапазону.RavenDB Граничный поиск: Я получаю неправильные образы для диапазонов цен

документ Мой продукт выглядит следующим образом:

{ 
    "Sku": "000000000000069673", 
    "Title": "APPLE ME186", 
    "Brand": "APPLE", 
    "RegularPrice": 84.99, 
    "ReferencePrice": 0.0, 
    "YouSavePrice": 0.0, 
    "ShortDescription": "", 
    "Description": "", 
    "CategoryHierarchyPath": "Beeld en geluid/Hoofdtelefoons/In-ear koptelefoon", 
    "Categories": [ 
    "0/Beeld en geluid", 
    "1/Beeld en geluid/Hoofdtelefoons", 
    "2/Beeld en geluid/Hoofdtelefoons/In-ear koptelefoon" 
    ], 
    "Stocks": [ 
    { 
     "Quantity": , 
     "Branch": "" 
    } 
    ], 
    "Images": [], 
    "Attributes": [ 
    { 
     "Name": "", 
     "Value": "" 
    } 
    ] 
} 

Индекс Я запрашивая против:

public class CategoryProducts : AbstractIndexCreationTask<Product, CategoryProducts.ReduceResult> 
{ 
    public class ReduceResult 
    { 
     public string Category { get; set; } 
     public string Title { get; set; } 
     public decimal RegularPrice { get; set; } 
     public string ShortDescription { get; set; } 
     public int Description { get; set; } 
    } 

    public CategoryProducts() 
    { 
     Map = products => 
       from p in products 
       from c in p.Categories 
       select new 
       { 
        Category = c, 
        Title = p.Title, 
        RegularPrice = p.RegularPrice, 
        ShortDescription = p.ShortDescription, 
        Description = p.Description 
       }; 
    } 
} 

The FacetSetup:

Facets = new List<Facet> 
{ 
new Facet 
    { 
     Name = "RegularPrice", 
     Mode = FacetMode.Ranges, 
     Ranges = 
      { 
       "[NULL TO Dx200.0]", 
       "[Dx200.0 TO Dx400.0]", 
       "[Dx400.0 TO Dx600.0]", 
       "[Dx600.0 TO Dx800.0]", 
       "[Dx800.0 TO NULL]", 
      } 
    } 
} 

Запросов:

var priceRangeFacets = Session.Query<CategoryProducts.ReduceResult, CategoryProducts>() 
      .Where(r => r.Category.StartsWith("1/Beeld en geluid/Hoofdtelefoons")).ToFacets("facets/PriceRanges") 

Результат:

[0] = {Range: [NULL TO Dx200.0], Hits: 0} 
[1] = {Range: [Dx200.0 TO Dx400.0], Hits: 0} 
[2] = {Range: [Dx400.0 TO Dx600.0], Hits: 0} 
[3] = {Range: [Dx600.0 TO Dx800.0], Hits: 0} 
[4] = {Range: [Dx800.0 TO NULL], Hits: 77} 

Обратите внимание, что у меня есть продукты в базе данных, которые дешевле, чем 800.

P.S. Я использую RavenDB-BUILD-2330

+0

Пожалуйста, создайте неисправного тест и отправить его в список рассылки. –

ответ

1

Решенный после коррекции Ayende для неисправного теста я создал:

  • При выполнении поиска диапазона на цифровом поле, вам нужно использовать постфикс _Range
  • Вы должны сделать [NULL TO Dx200.0}

[Is включительно} является эксклюзивным.

Таким образом, наша установка фаска должна быть объявлена ​​как:

Facets = new List<Facet> 
{ 
    new Facet 
    { 
     Name = "RegularPrice_Range", 
     Mode = FacetMode.Ranges, 
     Ranges = 
     { 
      "[NULL TO Dx200.0}", 
      "[Dx200.0 TO Dx400.0}", 
      "[Dx400.0 TO Dx600.0}", 
      "[Dx600.0 TO Dx800.0}", 
      "[Dx800.0 TO NULL}", 
     } 
    } 
} 
Смежные вопросы