elasticsearch,nest,C#,elasticsearch,Nest" /> elasticsearch,nest,C#,elasticsearch,Nest" />

C# Elasticsearch/Nest-使用带有OnFeeldSwithBoost的匹配短语

C# Elasticsearch/Nest-使用带有OnFeeldSwithBoost的匹配短语,c#,elasticsearch,nest,C#,elasticsearch,Nest,在我今天的代码中,我正在进行如下搜索: .Query(q => q.QueryString(qs => qs.Query(searchQuery).OnFieldsWithBoost(f => f.Add(b => b.MetaTitle, 5).Add(b => b.RawText, 1)))) 我的问题是,如果我搜索像这样的短语,这会给我一个非常广泛的搜索范围。“阳光灿烂”。我试着在原始文本中使用匹配短语,而不是查询字符串,这有点奏效 问题是,我仍然希望在Me

在我今天的代码中,我正在进行如下搜索:

.Query(q => q.QueryString(qs => qs.Query(searchQuery).OnFieldsWithBoost(f => f.Add(b => b.MetaTitle, 5).Add(b => b.RawText, 1))))
我的问题是,如果我搜索像这样的短语,这会给我一个非常广泛的搜索范围。“阳光灿烂”。我试着在原始文本中使用匹配短语,而不是查询字符串,这有点奏效


问题是,我仍然希望在MetaTitle和RawText中搜索,并使用我现在使用的增强功能。

我不知道Nest,但您要做的是使用a,with

在g**gle上快速搜索后,我发现boost部分的语法如下:

.Query(q => q
    .MultiMatch(m => m
        .OnFieldsWithBoost(b => b
            .Add(o => o.MyField, 2.0)
            .Add(o => o.AnotherField, 3.0)
        )
        .Type(TextQueryType.Phrase)
        .Query("my query text")
    )
)
API必须具有某种类型的
类型
参数,才能将
短语
类型添加到此参数中


编辑:在中快速查找后,我找到了上面添加的类型方法。

因为我没有找到未定义给定类型的多重匹配查询搜索示例。我花了几天时间试图解决这个问题,我想出了解决办法

我正在使用C#中的NEST库。在这里,我保留与上面相同的方法,但使用泛型,并传递带有字段和boots的字典,因为您将无法使用流畅的表达式进行智能书写。我还添加了skip和take(或from和size)方法、搜索类型和要执行搜索的索引数组

   var dic = new FluentDictionary<string, double?>();
    dic.Add("Field1", 1.0);
    dic.Add("Field2", 1.0);

   var response = Client.Search<T>(s => s
                                    .Skip(0)
                                    .Take(5)
                                    .Indices(indexes)
                                    .Query(q => q
                                        .MultiMatch(m => m
                                            .OnFieldsWithBoost(b => 
                                            {
                                                foreach (var entry in dic)
                                                    b.Add(entry.Key, entry.Value);     
                                            })
                                            .Type(TextQueryType.Phrase)
                                            .Query("your query text")
                                            )
                                         )
                                    );
var dic=new FluentDictionary();
dic.添加(“字段1”,1.0);
dic.添加(“字段2”,1.0);
var response=Client.Search(s=>s
.Skip(0)
.采取(5)
.指数
.Query(q=>q
.MultiMatch(m=>m
.OnFieldsWithBoost(b=>
{
foreach(dic中的var条目)
b、 添加(entry.Key,entry.Value);
})
.Type(TextQueryType.Phrase)
.Query(“您的查询文本”)
)
)
);

嘿,汤姆。谢谢你的意见。我试过下列方法。Query(q=>q.MultiMatch(m=>m.onfielswithboost(f=>f.Add(b=>b.MetaTitle,5)。Add(b=>b.RawText,1))。Query(searchQuery)))看起来也非常广泛。我得到了268分的成绩。用MatchPhrase我只得到了两个结果。