繁体   English   中英

如何在巢中为Elasticsearch添加动态突出显示字段?

[英]how do i add dynamic highlight fields in nest for elasticsearch?

我希望能够动态添加字段,以便在使用巢的elasticsearch中突出显示。 目前看来,它无法以任何方式进行迭代。

我已经尝试在.OnFields函数内进行迭代以生成.OnField函数的列表,但是它说这是不可迭代的。

在此示例中,我想动态添加“艺术家”和“标题”,并根据用户输入添加/删除其他人。 这可能吗?

s.Highlight(h => h
    .OnFields(f => f
        .OnField("artist")
        .OnField("title")
        .PreTags("<em>")
        .PostTags("</em>")
    ));

高亮显示一个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()
        ));

我意识到我已经混淆了两种类型:

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数组中的最后一个条目...回到了绘图板上?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM