Пример использования синонимов в гнезде

Я не нашел надежного примера того, как создавать и использовать синонимы с помощью Nest для Elasticsearch. если у кого-то есть, это было бы полезно.

моя попытка выглядит так, но я не знаю, как применить ее к полю.

var syn = new SynonymTokenFilter
{
    Synonyms = new [] { "pink, p!nk => pink", "lil, little", "ke$ha, kesha => ke$ha" },     
    IgnoreCase = true,
    Tokenizer = "standard"
};

client.CreateIndex("myindex", i =>
{
    i
        .Analysis(a => a.Analyzers(an => an
            .Add("fullTermCaseInsensitive", fullTermCaseInsensitive)
            )
            .TokenFilters(x => x
                .Add("synonym", syn)
                )
            )
...

2 ответа

Решение

Предполагая ваш fullTermCaseInsensitive Анализатор настраиваемый, вам нужно добавить к нему фильтр синонимов:

var fullTermCaseInsensitive = new CustomAnalyzer()
    {
        .
        .
        .
        Filter = new string[] { "syn" }
    };

И после создания вашего индекса вы можете добавить отображение и применить fullTermCaseInsensitive анализатор в вашей области (областях):

client.CreateIndex("myindex", c => c
    .Analysis(a => a
        .Analyzers(an => an.Add("fullTermCaseInsensitive", fullTermCaseInsensitive))
        .TokenFilters(tf => tf.Add("syn", syn)))
    .AddMapping<MyType>(m => m
        .Properties(p => p
            .String(s => s.Name(t => t.MyField).Analyzer("fullTermCaseInsensitive")))));

Это очень просто:) вам нужно сначала определить фильтр синонимов, который вы можете использовать в своем пользовательском анализаторе... где вы можете добавить и другие типы фильтров. Небольшой пример:

        .Analysis(descriptor => descriptor
            .Analyzers(bases => bases
                .Add("folded_word", new CustomAnalyzer()
                {
                    Filter = new List<string> { "icu_folding", "trim", "synonym" },
                    Tokenizer = "standard"
                }
            )                 
         )
         .TokenFilters(i => i
                     .Add("synonym", new SynonymTokenFilter() 
                     {
                        SynonymsPath="analysis/synonym.txt",
                        Format = "Solr"
                     }
                     )
         ) 

Затем вы можете использовать пользовательский анализатор в части отображения

Другие вопросы по тегам