我希望能够使用nest动态添加用于在elasticsearch中突出显示的字段。目前它似乎无法以任何方式进行迭代。
我已尝试在.OnFields函数中进行迭代,以生成.OnField函数列表,但它表示它不可迭代。
在这个例子中,我想动态添加“艺术家”#39;和' title'并根据用户输入添加/删除其他人。这有可能吗?
s.Highlight(h => h
.OnFields(f => f
.OnField("artist")
.OnField("title")
.PreTags("<em>")
.PostTags("</em>")
));
答案 0 :(得分:3)
精彩集锦需要Action<HighlightFieldDescriptor<T>>
的数组。您只传递一个Action<HighlightFieldDescriptor<T>>
并多次调用OnField,这会不断替换最后一个值。
应该是这样:
s.Highlight(h => h
.OnFields(
f => f.OnField("artist").PreTags("<em>").PostTags("</em>"),
f => f.OnField("title").PreTags("<em>").PostTags("</em>")
));
从后续帖子中的代码,这是使用LINQ的解决方案:
s.Highlight(h => h
.OnFields(
SearchFields(searchDescriptor.SearchModifier).Select(x => new Action<HighlightFieldDescriptor>(f => f.OnField(x))).ToArray()
));
答案 1 :(得分:0)
我意识到我混淆了几种类型:
HighlightFieldDescriptor和HighlightDescriptor。抱歉。这是我的实施(所以我可以标记为已回答)
s.Highlight(h => h
.OnFields(f =>
GetFieldsHighligthDescriptor(searchDescriptor, f)
)
);
private void GetFieldsHighligthDescriptor(SearchQueryDescriptor searchDescriptor, HighlightFieldDescriptor<Product> f)
{
foreach (var b in SearchFields(searchDescriptor.SearchModifier))
{
f.OnField(b);
}
}
修改强>
实际上,这不起作用,因为它只返回我的SearchFields数组中的最后一个条目...回到绘图板?