如何在nest中添加动态突出显示字段以进行弹性搜索?

时间:2014-06-09 20:37:08

标签: elasticsearch nest

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

我已尝试在.OnFields函数中进行迭代,以生成.OnField函数列表,但它表示它不可迭代。

在这个例子中,我想动态添加“艺术家”#39;和' title'并根据用户输入添加/删除其他人。这有可能吗?

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

2 个答案:

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