Как добавить полную фразу токенизатор в Nest для Elasticsearch?
Когда я создаю поиск с использованием фасетов, я хочу, чтобы результаты фасетов были на всей фразе, а не на отдельном слове. и я хочу, чтобы он НЕ учитывал регистр - как сделал бы not_analyzed.
например, если у меня есть музыкальный объект json и я хочу организовать побочные эффекты в зависимости от жанра, я хочу, чтобы каждый жанр представлял собой весь жанровый термин (ритм и блюз), а не один аспект для "ритма" и один для "блюза" ", и я хочу иметь возможность искать" ритм-н-блюз "и сопоставлять его с" ритм-н-блюз "(случай уведомления).
кажется, что документация эластичного поиска предлагает использовать собственный анализатор токенизатора и строчный фильтр.
вот предложение от упругого поиска, которое я упомянул: (в середине страницы) http://www.elasticsearch.org/blog/starts-with-phrase-matching/
Я хочу иметь возможность сказать что-то вроде (в моем POCO в псевдокоде):
[ElasticProperty(Analyzer = "tokenizer, lowercase"]
public string Genre { get; set; }
1 ответ
Используйте тип мультиполя в вашем отображении. Это позволит вам проиндексировать поле "Жанр" двумя способами - проанализировать (используя стандартный или строчный анализатор) для проведения поиска и not_analyzed для фасетирования.
Для более сложных отображений, подобных этому, отображение на основе атрибутов в NEST не обрезает его. Вам придется использовать свободный API, например:
client.CreatIndex("songs", c => c
.AddMapping<Song>(m => m
.MapFromAttributes()
.Properties(props => props
.MultiField(mf => mf
.Name(s => s.Genre)
.Fields(f => f
.String(s => s.Name(o => o.Genre).Analyzer("standard"))
.String(s => s.Name(o => o.Genre.Suffix("raw")).Index(FieldIndexOption.not_analyzed)))))));
Надеюсь это поможет!