建议字段数组

Suggestion field array

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

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 }
}

我会将 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;
}

希望对您有所帮助。