0

我有一个包含标签数组的文档。我需要创建一个与此标签字段对应的建议字段(根据标签数组中的值生成标签建议)。我主要使用 NEST 与弹性搜索进行交互。但我无法更新建议属性。用于文档的类包含以下文档结构:

public class SuggestField
{
    public IEnumerable<string> Input { get; set; }
    public string Output { get; set; }
    public object Payload { get; set; }
    public int? Weight { get; set; }
}


public class Source{

        [ElasticProperty(Index = FieldIndexOption.NotAnalyzed)]
        public string[] tags { get; set; }

        public SuggestField[] tag_suggest { get; set; }
}

我添加映射如下:

var response = client.Map<Source>(m => m
                                     .MapFromAttributes()
                                     .Properties(p => p
                                     .Completion(c => c
                                     .Name(cp => cp.tag_suggest)
                                         .Payloads()
                                     )));

为了更新标签,我使用外部脚本。我希望更改相同的脚本以添加对 tag_suggest 字段的更改。但我尝试了以下但它不工作。以下是我尝试过的脚本:

if (ctx._source.tags.indexOf(newTag) < 0) {
      ctx._source.tags[ctx._source.tags.length] = newTag;
      ctx._source.tag_suggest[ctx._source.tag_suggest.length] = { input :newTag }
}
4

1 回答 1

1

我会将tag_suggest属性类型从更改SuggestField[]SuggestField。您可以将所有标签存储在SuggestField.Input.

public class Source
{

    [ElasticProperty(Index = FieldIndexOption.NotAnalyzed)]
    public string[] tags { get; set; }

    public SuggestField tag_suggest { get; set; }
}

关于您的更新脚本,在此更改之后,您可以将其修改为:

if (ctx._source.tags.indexOf(newTag) < 0) {
      ctx._source.tags[ctx._source.tags.length] = newTag;
      ctx._source.tag_suggest.input[ctx._source.tag_suggest.length] = newTag;
}

希望能帮助到你。

于 2015-09-25T09:34:50.660 回答