弹性搜索 Nest 客户端未应用提升
Elastic search Nest client not applying boost
我正在调查搜索结果与预期不符的错误,发现这是因为未应用提升。
查询是使用 NEST (6.6.0) 使用以下代码生成的:
queryContainer = new MultiMatchQuery
{
Fuzziness = Fuzziness.Auto,
Query = querystring,
Type = TextQueryType.BestFields,
Fields = Infer.Fields<RecipeSearchModel>(
f1 => Infer.Field<RecipeSearchModel>(f => f.Title, 5),
f2 => f2.Description,
f3 => Infer.Field<RecipeSearchModel>(f => f.Ingredients, 3),
f4 => f4.Method,
f5 => Infer.Field<RecipeSearchModel>(f => f.Image.Alt, 4))
};
但是生成的查询没有应用任何提升。:
"multi_match": {
"fields": [
"title",
"description",
"ingredients",
"method",
"image.alt"
],
"fuzziness": "AUTO",
"query": "chocolate",
"type": "best_fields"
}
从 documentation 可以看出这似乎是正确的,为什么它不起作用?
确实好像某处忽略了 boost,here 是 link 到 github 的问题。
现在,您可以尝试另一种语法:
queryContainer = new MultiMatchQuery
{
Fuzziness = Fuzziness.Auto,
Query = "query",
Type = TextQueryType.BestFields,
Fields = Infer.Fields<RecipeSearchModel>()
.And(Infer.Field<RecipeSearchModel>(f => f.Title, 5))
.And<RecipeSearchModel>(f => f.Description)
.And(Infer.Field<RecipeSearchModel>(f => f.Ingredients, 3))
.And<RecipeSearchModel>(f => f.Method)
.And(Infer.Field<RecipeSearchModel>(f => f.Image.Alt, 4))
};
它生成以下对 elasticsearch 的查询
{
"query": {
"multi_match": {
"fields": [
"title^5",
"description",
"ingredients^3",
"method",
"image.alt^4"
],
"fuzziness": "AUTO",
"query": "query",
"type": "best_fields"
}
}
}
使用 NEST 6.6.0 测试。
希望对您有所帮助。
我正在调查搜索结果与预期不符的错误,发现这是因为未应用提升。
查询是使用 NEST (6.6.0) 使用以下代码生成的:
queryContainer = new MultiMatchQuery
{
Fuzziness = Fuzziness.Auto,
Query = querystring,
Type = TextQueryType.BestFields,
Fields = Infer.Fields<RecipeSearchModel>(
f1 => Infer.Field<RecipeSearchModel>(f => f.Title, 5),
f2 => f2.Description,
f3 => Infer.Field<RecipeSearchModel>(f => f.Ingredients, 3),
f4 => f4.Method,
f5 => Infer.Field<RecipeSearchModel>(f => f.Image.Alt, 4))
};
但是生成的查询没有应用任何提升。:
"multi_match": {
"fields": [
"title",
"description",
"ingredients",
"method",
"image.alt"
],
"fuzziness": "AUTO",
"query": "chocolate",
"type": "best_fields"
}
从 documentation 可以看出这似乎是正确的,为什么它不起作用?
确实好像某处忽略了 boost,here 是 link 到 github 的问题。 现在,您可以尝试另一种语法:
queryContainer = new MultiMatchQuery
{
Fuzziness = Fuzziness.Auto,
Query = "query",
Type = TextQueryType.BestFields,
Fields = Infer.Fields<RecipeSearchModel>()
.And(Infer.Field<RecipeSearchModel>(f => f.Title, 5))
.And<RecipeSearchModel>(f => f.Description)
.And(Infer.Field<RecipeSearchModel>(f => f.Ingredients, 3))
.And<RecipeSearchModel>(f => f.Method)
.And(Infer.Field<RecipeSearchModel>(f => f.Image.Alt, 4))
};
它生成以下对 elasticsearch 的查询
{
"query": {
"multi_match": {
"fields": [
"title^5",
"description",
"ingredients^3",
"method",
"image.alt^4"
],
"fuzziness": "AUTO",
"query": "query",
"type": "best_fields"
}
}
}
使用 NEST 6.6.0 测试。
希望对您有所帮助。