建议字段数组
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;
}
希望对您有所帮助。
我有一个包含标签数组的文档。我需要创建一个与该标签字段对应的建议字段(以根据标签数组中的值生成标签建议)。我主要使用 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;
}
希望对您有所帮助。