elasticsearch 如何在nest中使用同义词的示例,elasticsearch,nest,elasticsearch,Nest" /> elasticsearch 如何在nest中使用同义词的示例,elasticsearch,nest,elasticsearch,Nest" />

elasticsearch 如何在nest中使用同义词的示例

elasticsearch 如何在nest中使用同义词的示例,elasticsearch,nest,elasticsearch,Nest,我还没有找到一个关于如何使用Nest for Elasticsearch创建和使用同义词的可靠示例。如果有人有一个,这将是有益的 我的尝试看起来像这样,但我不知道如何将其应用于字段 var syn = new SynonymTokenFilter { Synonyms = new [] { "pink, p!nk => pink", "lil, little", "ke$ha, kesha => ke$ha" }, IgnoreCase = true,

我还没有找到一个关于如何使用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)
                )
            )
...

假设您的
fulltermcasensitive
分析器是自定义的,您需要向其中添加同义词过滤器:

var fulltermcasensitive=new CustomAnalyzer()
{
.
.
.
筛选器=新字符串[]{“syn”}
};
创建索引后,您可以添加映射,并将
FullTermCaseSensitive
分析器应用于字段:

client.CreateIndex(“myindex”,c=>c
.分析(a=>a
.Analyzers(an=>an.Add(“FullTermCaseSensitive”,FullTermCaseSensitive))
.TokenFilters(tf=>tf.Add(“syn”,syn)))
.AddMapping(m=>m
.Properties(p=>p
.String(s=>s.Name(t=>t.MyField).Analyzer(“FullTermCaseSensitive”()));
很简单:) 您需要首先定义同义词过滤器,您可以在自定义分析器中使用它…在自定义分析器中还可以添加其他类型的过滤器。 小例子:

        .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"
                     }
                     )
         ) 
.Analysis(描述符=>描述符
.分析仪(基准=>基准
.添加(“折叠的单词”,新CustomAnalyzer()
{
过滤器=新列表{“icu折叠”、“修剪”、“同义词”},
标记器=“标准”
}
)                 
)
.TokenFilters(i=>i
.Add(“同义词”,新同义词过滤器()
{
同义词spath=“analysis/synonym.txt”,
Format=“Solr”
}
)
) 

然后,您可以在映射部分使用自定义分析器,这很有效!我想我的思路是正确的……在您看来,我应该创建一个多字段以便使用同义词(比如“艺术家”字段)进行搜索,还是应该使用同义词过滤器并将其设置为常规字段(而不是多字段)?而且,看起来我不能替换单个字符?例如$,s?如果我在同义词列表中使用它,它将不会索引。