2016-08-02 2 views
0

Это моя агрегация:Aggregation фразы в ElasticSearch с использованием C# Nest

return a => 
        a.Terms("Group1", t => t.Field(ff => ff.ItemAttributeDesc1). 
         Aggregations(aa => aa.Terms("Value1", tt => tt.Field(fff => fff.SearchedFilterValue1)))) 
        .Terms("Group2", t => t.Field(ff => ff.ItemAttributeDesc2). 
         Aggregations(aa => aa.Terms("Value2", tt => tt.Field(fff => fff.SearchedFilterValue2)))) 
        .Terms("Group3", t => t.Field(ff => ff.ItemAttributeDesc3). 
         Aggregations(aa => aa.Terms("Value3", tt => tt.Field(fff => fff.SearchedFilterValue3)))) 
        .Terms("Group4", t => t.Field(ff => ff.ItemAttributeDesc4). 
         Aggregations(aa => aa.Terms("Value4", tt => tt.Field(fff => fff.SearchedFilterValue4)))) 
        .Terms("Group5", t => t.Field(ff => ff.ItemAttributeDesc5). 
         Aggregations(aa => aa.Terms("Value5", tt => tt.Field(fff => fff.SearchedFilterValue5)))) 
        .Terms("Group6", t => t.Field(ff => ff.ItemAttributeDesc6). 
         Aggregations(aa => aa.Terms("Value6", tt => tt.Field(fff => fff.SearchedFilterValue6)))) 
        .Terms("Group7", t => t.Field(ff => ff.ItemAttributeDesc7). 
         Aggregations(aa => aa.Terms("Value7", tt => tt.Field(fff => fff.SearchedFilterValue7)))) 
        .Terms("Group8", t => t.Field(ff => ff.ItemAttributeDesc8). 
         Aggregations(aa => aa.Terms("Value8", tt => tt.Field(fff => fff.SearchedFilterValue8)))) 
        .Terms("Brands", t => t.Field(ff => ff.VendorSearch).Size(60).Order(TermsOrder.TermAscending)) 
        .Terms("Category", t => t.Field(ff => ff.MainSearch)) 
        .Range("Price", ra => ra.Field(ff => ff.SalePrice) 
         .Ranges(
         pr => pr.From(50).To(100), 
         pr => pr.From(100).To(250), 
         pr => pr.From(250).To(500), 
         pr => pr.From(500).To(750), 
         pr => pr.From(750).To(1000), 
         pr => pr.From(1000).To(1500), 
         pr => pr.From(1500).To(2000), 
         pr => pr.From(2000).To(2500), 
         pr => pr.From(2500).To(3000), 
         pr => pr.From(3000).To(3500), 
         pr => pr.From(3500))); 

Это работает, как ожидалось, за исключением одной вещи. Я должен заполнить полный матч. Например, если у меня есть поле поля «Поле» (одно слово), оно работает нормально. Но когда, если термин содержит несколько слов (или имеет определенные символы), он не работает. Не работает, потому что эластичная расколотая фраза по пробелам и символам. Мне нужно 100% совпадение здесь. Может ли кто-нибудь помочь мне решить проблему?

ответ

1

Это происходит потому, что поле вы агрегирование на сопоставляются как анализируемая строка, которая является отображением по умолчанию для типов строк, чтобы решить эту проблему, сопоставьте соответствующие поля вы на общие в качестве type: string и index: not_analyzed

Подробнее информация относительно analyzed strings

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