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