我无法使用Nest以编程方式在elasticsearch中的字段上设置相似性。
这是我如何设置索引的示例。它在多场映射中,我想设置相似性,所以我可以尝试像BM25相似性这样的东西......
(参见下面的道具>多字段部分)...
var createInd = client.CreateIndex("myindex", i =>
{
i
.Analysis(a => a.Analyzers(an => an
.Add("nameAnalyzer", nameAnalyzer)
)
.AddMapping<SearchData>(m => m
.MapFromAttributes()
.Properties(props =>
{
props
.MultiField(mf => mf
//title
.Name(s => s.Title)
.Fields(f => f
.String(s => s.Name(o => o.Title).Analyzer("nameAnalyzer"))
.String(s => s.Name(o => o.Title.Suffix("raw")).Index(FieldIndexOption.not_analyzed))
)
);
...
答案 0 :(得分:1)
最近才有了this commit来设置字符串字段的相似性。你现在可以这样做:
.String(s => s.Name(o => o.Title).Similarity("my_similarity")
这是假设您已经在索引中添加了相似性。 NEST目前缺乏实际配置相似性的灵活性。现在你必须使用CustomSimilaritySettings
类。例如:
var bm25 = new CustomSimilaritySettings("my_similarity", "BM25");
bm25.SimilarityParameters.Add("k1", "2.0");
bm25.SimilarityParameters.Add("b", "0.75");
var settings = new IndexSettings();
settings.Similarity = new SimilaritySettings();
settings.Similarity.CustomSimilarities.Add(bm25);
client.CreateIndex("myindex", c => c.InitializeUsing(settings));
在创建索引时能够通过流畅的API执行此操作会很高兴。我正在考虑在1.0RC发布之前为此发送PR。