2015-01-17 3 views
0

Я использовал массив строк индексировать поля, как показано ниже:Упругого Поиск джокер

public class MetaData 
{ 
    public string[] time { get; set; } 
    public string name { get; set; } 
} 


client.CreateIndex(casedirectory_metadata, c => c 
    AddMapping<object>(m => m 
     .Properties(props => props 
      .String(ps => ps.Name("time").IndexAnalyzer("keyword")) 
      .String(ps => ps.Name("name").IndexAnalyzer("keyword")) 
))); 

MetaData objmetadata = new MetaData(); 
objmetadata.time = new string[] { "morning" }; 
objmetadata.name = "jhon"; 
client.Index<object>((object)objmetadata); 

MetaData objmetadata = new MetaData(); 
objmetadata.time = new string[] {"this morning", "9.30 am", "evening" }; 
objmetadata.name = "jhon rapher"; 
client.Index<object>((object)objmetadata); 

В приведенной выше коде есть два поля проиндексировано время и имя. время поля типа массива строк и поле имени, если простого типа строки
В Ниже коде диком поиска символов карты производятся с скоплениями на поле времени

var qryRes1 = client.Search<object>(x => x 

        .Aggregations(ag => ag 
          .Filter("filter", (flt => flt 
           .Filter(f => 
           { 
            FilterContainer filter = null; 
            filter &= f.Query(qr => qr.Wildcard(wl => wl.OnField("time").Value("morning"))); 
            return filter; 
           }) 
             .Aggregations(agr => agr 

             .Terms("time", tr => 
             { 
              TermsAggregationDescriptor<object> trmAggDescriptor = new TermsAggregationDescriptor<object>(); 
              trmAggDescriptor.Field("time"); 

              trmAggDescriptor.Size(0); 
              return trmAggDescriptor; 
             })))) 
         )); 

выше запрос должен возвращать только скопления на «утро» с count 1, потому что первое «утро» отфильтровывается с использованием подстановочного знака, а затем применяется агрегирование, но оно агрегирует и возвращает все значения во время подачи. Если для имени поля = «john» применяется тот же запрос, он возвращает правильный результат 1 запись.

Должен ли я сделать что-нибудь еще, чтобы делать поиск по диким картам в поле типа массива?

+0

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

+0

@dogjones спасибо за ответ. Пожалуйста, проверьте выше отредактированный код, что мне нужно – USER007

ответ

0

Я решил, что myself.i пришлось использовать включать и исключать в скоплениях, чтобы сделать фильтр работать и удалить дикие карты типа query.Refering here помог мне

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