我如何在每个字段的基础上为嵌套设置弹性搜索的相似性

时间:2014-06-26 14:19:08

标签: elasticsearch nest

我无法使用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))
                        )
                    );
                    ...

1 个答案:

答案 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。