Я использовал массив строк индексировать поля, как показано ниже:Упругого Поиск джокер
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 запись.
Должен ли я сделать что-нибудь еще, чтобы делать поиск по диким картам в поле типа массива?
Я не совсем уверен, почему ваш запрос возвращает обе записи. Мне кажется, что запрос должен фактически вернуть только первую запись. При этом, я думаю, вы должны попытаться сделать поле «время» не проанализированным. Почему вы используете анализатор ключевых слов в этом поле (в отличие от того, чтобы он не анализировался)? –
@dogjones спасибо за ответ. Пожалуйста, проверьте выше отредактированный код, что мне нужно – USER007