gpt4 book ai didi

c# - NEST FunctionScore()在添加函数之前返回所有索引的项目,在添加它们之后引发异常

转载 作者:行者123 更新时间:2023-12-03 01:00:12 25 4
gpt4 key购买 nike

好了,因此该查询在Chrome的Sense中完美运行。我使用以下查询:

{
"size":127,
"query": {
"function_score": {
"query": {
"bool": {
"must": [
{
"prefix": {
"name": {
"value": "incomp"
}
}
},
{
"match": {
"name": "a word that is"
}
}
]
}
},
"functions": [
{
"exp": {
"date": {
"origin": "now/d",
"scale": "3w",
"offset": "10d",
"decay": "0.88"
}
}
}
]
}
}
}

简而言之,我在ES中自定义类型的索引“名称”属性上进行匹配,优先考虑最近添加的项目,并支持“键入时建议”-因此使用前缀查询。它可以很好地进行调整,因此,下一步是在NEST中进行复制。

但是,下面的.NET NEST代码面临一些问题:
var results4 = _client.Search<customDataType>(
s => s.Size(5030)
.Query(q => q
.FunctionScore(fs => fs
.Name("another_named_query")
.BoostMode(FunctionBoostMode.Multiply)
.ScoreMode(FunctionScoreMode.Multiply)
.Query(qu => qu
.Bool(b => b
.Must(m => m
.Prefix(p => p
.Field(ff => ff.Name)
.Value(prefixVal)))
.Must(m2 => m2
.Match(mh => mh
.Field(f2 => f2.Name)
.Query(stringBeforePrefixVal)))))
/*.Functions( fcs => fcs.ExponentialDate(
exp => exp
.Origin(DateMath.Now)
.Scale(new Time(1814400000))
.Offset(new Time(864000000))
.Decay(0.88d))
)*/)));

我不知道为什么任何尝试使用“FunctionScore”方法的结果都会导致MatchAll()会做什么-返回所有记录。

同时,在添加函数时(在上面注释),我在C:\ code \ elasticsearch-net \ src \ Nest \ CommonAbstractions \ Infer \ Field \ FieldResolver的Ne​​st.FieldResolver.Resolve(Field field)处获得了一个带有NullReference内部异常的UnexpectedElasticsearchClientException .cs:第31行。

我对此感到困惑,似乎没有类似的问题可以作为起点。有什么我可以做的才能使查询运行起来,还是我应该手动进行一次 Restful API调用?

最佳答案

几乎正确,但是您缺少应在其上运行指数日期衰减函数的字段。假设您的POCO看起来像

public class customDataType
{
public string Name { get; set; }

public DateTime Date { get; set; }
}

查询将是
var prefixVal = "incomp";
var stringBeforePrefixVal = "a word that is";

var results4 = client.Search<customDataType>(s => s
.Size(5030)
.Query(q => q
.FunctionScore(fs => fs
.Name("another_named_query")
.BoostMode(FunctionBoostMode.Multiply)
.ScoreMode(FunctionScoreMode.Multiply)
.Query(qu => qu
.Bool(b => b
.Must(m => m
.Prefix(p => p
.Field(ff => ff.Name)
.Value(prefixVal)))
.Must(m2 => m2
.Match(mh => mh
.Field(f2 => f2.Name)
.Query(stringBeforePrefixVal)))))
.Functions(fcs => fcs
.ExponentialDate(exp => exp
.Field(f => f.Date)
.Origin("now/d")
.Scale("3w")
.Offset("10d")
.Decay(0.88)
)
)
)
)
);

产生
{
"size": 5030,
"query": {
"function_score": {
"_name": "another_named_query",
"query": {
"bool": {
"must": [
{
"match": {
"name": {
"query": "a word that is"
}
}
}
]
}
},
"functions": [
{
"exp": {
"date": {
"origin": "now/d",
"scale": "3w",
"offset": "10d",
"decay": 0.88
}
}
}
],
"score_mode": "multiply",
"boost_mode": "multiply"
}
}
}

您可以利用NEST中的运算符重载,通过 bool&&prefix查询来进一步缩短 match查询
var results4 = client.Search<customDataType>(s => s
.Size(5030)
.Query(q => q
.FunctionScore(fs => fs
.Name("another_named_query")
.BoostMode(FunctionBoostMode.Multiply)
.ScoreMode(FunctionScoreMode.Multiply)
.Query(qu => qu
.Prefix(p => p
.Field(ff => ff.Name)
.Value(prefixVal)
) && qu
.Match(mh => mh
.Field(f2 => f2.Name)
.Query(stringBeforePrefixVal)
)
)
.Functions(fcs => fcs
.ExponentialDate(exp => exp
.Field(f => f.Date)
.Origin("now/d")
.Scale("3w")
.Offset("10d")
.Decay(0.88)
)
)
)
)
);

关于c# - NEST FunctionScore()在添加函数之前返回所有索引的项目,在添加它们之后引发异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39194737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com