2013-07-24 6 views
3

Я столкнулся с некоторыми проблемами, пытаясь использовать статистические аспекты в моих документах в Elastic Search. Это привело к следующим сообщениям в группе поиска Elastic Search google - см. https://groups.google.com/forum/#!topic/elasticsearch/wNjrnAC_KOY. Я попытался применить рекомендацию в ответе об использовании типов Nested в документе, чтобы предоставить различные суммы в свойстве коллекций (см. https://groups.google.com/forum/#!topic/elasticsearch/wNjrnAC_KOY)Как использовать вложенные типы с клиентом NEST для Elastic Search

То есть у меня было бы много экземпляров MyType с коллекцией MyItem. В некоторых коллекциях MyItem будут экземпляры с соответствующими суммами, то есть первый документ может иметь два экземпляра myitem, оба с количеством в 100. Без вложенных типов я не считаю, что статистические аспекты будут агрегировать каждую сумму, поскольку они не уникальны.

Итак, я создал структуру документа (как показано ниже) и заполнил свой индекс. Перед заполнением моего индекса я использовал следующий код, чтобы создать вложенный документ.

client.MapFromAttributes<Page>(); 


[ElasticType(Name="page", DateDetection = true, NumericDetection = true, SearchAnalyzer = "standard",IndexAnalyzer = "standard")] 
    public class MyType 
    { 
     public int TypeId { get; set; } 
     public string Name { get; set; } 
     public ANotherType AnotherProperty { get; set; } 
     public DateTime Created { get; set; } 

     [ElasticProperty(Type = FieldType.nested, Name="mycollection")] 
     public List<MyItem> MyItems { get; 
    } 

    public class MyItem 
    { 
     public decimal Amount {get;set;} 
    } 

Однако, когда я запускаю следующий запрос через гнездо api, я не получаю никаких результатов.

query.Index("pages") 
     .Type("page") 
     .From(0) 
     .Size(100) 
      .FacetStatistical("TotalAmount", x => x.Nested("donations") 
      .OnField("amount"))); 

Более Я также попытался следующим через Chrome плагин Почтальон:

{ 
    "facets": { 
     "test": { 
     "statistical": { 
      "field": "amount" 
     }, 
     "nested": "mycollection" 
     } 
    }, 
    "size":0 
}' 

и получить ответ, который отмечает:

»..facet вложенного пути [MyCollection] является не вложенных ".

Любые мысли об этом были бы замечательными.

Tim

ответ

3

Попробуйте карту вы возражаете как следует:

client.MapFluent<MyType>(m=>m 
    .MapFromAttributes() 
    .NestedObject<MyItem>(no=>no 
     .Name(p=>p.MyItems.First()) 
     .Dynamic() 
     .Enabled() 
     .IncludeInAll() 
     .IncludeInParent() 
     .IncludeInRoot() 
     .MapFromAttributes() 
     .Path("full") 
     .Properties(pprops => pprops 
      .String(ps => ps 
       .Name(p => p.FirstName) 
       .Index(FieldIndexOption.not_analyzed) 
      ) 
      //etcetera 
     ) 
    ) 
); 

client.MapFromAttributes() очень ограничено, и, вероятно, будет удален в версии 1.0. Его замечательно комментировать имена свойств, но быстро становится ограниченным тем, что он может выразить. MapFromAttributes() в вызове mapfluent по-прежнему является отличным способом ввода int как int, float как float, DateTime как даты и т. Д.

+0

Спасибо Martijn. Сегодня утром мне удалось заставить его работать с оригинальным решением. Я не смотрел ответ от client.MapFromAttributes (), который дул. Причины были ясны после того, как я обратил внимание на ответ. Вложенные сопоставления не вступили в силу, потому что я бы установил свойство строки, которое не анализировалось через атрибут, и не квалифицировало свойство int как отображение int. Однажды я решил это. Это сработало. Я попробую ваше решение, хотя если это лучший способ сопоставить. Еще раз спасибо. –

+5

NestedObject не входит в состав API теперь в текущей версии NEST. Есть ли альтернативный способ сделать это сейчас? – JamieGaines

Смежные вопросы