Я ищу по Event
объектам в моем индексе elasticsearch, используя NEST. На базовом уровне, Event
выглядит следующим образом:Эластичный поиск NEST-фасет - это токенизирующее поле, даже если атрибут NotAnalyzed определен в сопоставлении
public class Event
{
public int Id {get; set;}
[ElasticProperty(Index = FieldIndexOption.NotAnalyzed)]
public string EventType {get; set;}
}
Мой поиск выглядит следующим образом:
SearchDescriptor<Event> search = new SearchDescriptor<Event>()
.From(0)
.Take(10000)
.QueryRaw(@"{""match_all"": {} }")
.FacetTerm("my_facet", f => f.OnField("eventType"));
var esResults = esClient.Search<Event>(search);
В настоящее время, все мои документы в ЧС имеет eventType
из Test type
, но фаска вернули результаты для Test
и type
, вместо того, чтобы возвращать их вместе.
Я понимаю, что Index = FieldIndexOption.NotAnalyzed
должен решить эту проблему, но я все еще вижу ее. Почему это происходит?
Я не называл явным образом 'CreateIndex' в любой точке. Должно ли это сопоставление быть на месте во время создания индекса? – Jim
Вы можете воспользоваться [put mapping api] (https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-put-mapping.html). Зависит от вашего прецедента, разместите более подробную информацию, так что, возможно, я смогу рассказать что-то умнее. – Rob
У меня есть простой прототип для тестирования ES в продукте, который ранее использовался Solr. Я индексирую с помощью 'ElasticClient.IndexMany()', а затем я ищу, как описано в моем вопросе. – Jim