如何在嵌套中使用同义词的示例

时间:2014-05-21 13:47:05

标签: elasticsearch nest

我还没有找到一个关于如何使用Nest for 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 个答案:

答案 0 :(得分:2)

这很简单:) 您需要首先定义同义词过滤器,您可以在自定义分析器中使用它...您还可以添加其他类型的过滤器。 小例子:

        .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"
                     }
                     )
         ) 

然后您可以在映射部分

中使用自定义分析器

答案 1 :(得分:1)

假设您的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")))));