【发布时间】:2018-09-13 14:56:21
【问题描述】:
我目前正在为手机数据库开发 NEST 搜索器。我在制作动态版本方面运气不佳,以便用户可以过滤某些术语以在前端搜索。
这是因为 NEST 不喜欢用变量替换字段“f.something”。由于这个原因,我使用了静态,因为我相信我可以通过一些对象实例化来做到这一点。
但是,现在即使我收到了有效的 NEST 响应,它们也总是空的,即使显然有结果。例如“姓名”用于字段,“iPhone”用于查询。我错过了什么?提前致谢。
附:注释掉的代码曾经有“bool”和“should”签入,但同样我一直没有得到任何结果。
private ISearchResponse<MasterProduct> SearchThis(ElasticClient client, string query, string field, int pageSize, int recordNumber)
{
var searchLayout = new SearchRequest<MasterProduct>
{
Size = pageSize,
From = recordNumber,
Query = new MatchQuery
{
Field = field,
Query = query,
Fuzziness = Fuzziness.Auto,
PrefixLength = 2,
Lenient = true,
FuzzyRewrite = MultiTermQueryRewrite.TopTermsBlendedFreqs(10)
}
};
var searchResponse = client.Search<MasterProduct>(searchLayout);
return searchResponse;
}
/*var searchResponse = client.Search<MasterProduct>(s => s
.From(recordNumber)
.Size(pageSize)
.Query(q => q
.Match(a => a
.Field(f => f.MasterProductName)
.Query(query)
.Fuzziness(Fuzziness.Auto)
.PrefixLength(2)
.Fuzziness(Fuzziness.Auto)
.Lenient()
.FuzzyRewrite(MultiTermQueryRewrite.TopTermsBlendedFreqs(10))
)
.Match(b => b
.Field(f => f.ManufacturerName)
.Query(query)
.Fuzziness(Fuzziness.Auto)
.PrefixLength(2)
.Fuzziness(Fuzziness.Auto)
.Lenient()
.FuzzyRewrite(MultiTermQueryRewrite.TopTermsBlendedFreqs(10))
)
.Match(c => c
.Field(f => f.MasterAttributes)
.Query(query)
.Fuzziness(Fuzziness.Auto)
.PrefixLength(2)
.Fuzziness(Fuzziness.Auto)
.Lenient()
.FuzzyRewrite(MultiTermQueryRewrite.TopTermsBlendedFreqs(10))
)
)
);
Console.WriteLine(searchResponse.Hits.Count());
foreach (var hit in searchResponse.Documents)
{
Console.WriteLine(hit.MasterProductId);
}*/
}
【问题讨论】:
-
“NEST 不喜欢用变量替换字段“f.something”” - 你能详细说明你的意思吗?你在寻找类似
.Suffix(...):elastic.co/guide/en/elasticsearch/client/net-api/current/… -
@RussCam 感谢 Russ 的回复。本质上,我想根据输入的变量搜索 NEST 中的某个字段。因此将输入“MasterProductId”,查询将在该字段上进行搜索。但是我找不到这样做的方法,似乎要搜索的字段都需要硬编码。是这样吗?再次感谢:)
-
Field类型具有从string的隐式转换,因此您可以为该字段传递string输入。请注意,字符串是逐字记录的,而不是表达式或PropertyInfo的大小写,因此如果您使用默认值滚动,则字符串值需要采用驼峰式大小写,例如masterProductName. -
@RussCam 非常感谢你的工作,现在我只需要解决我无法查询数字的问题哈哈
标签: c# .net elasticsearch nest