2015-09-24 19 views
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 } 
} 

回答

1

我就從SuggestField[]改變tag_suggest屬性的類型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; 
} 

希望它能幫助。

+0

是的!謝謝 :) – labyrinth