[英]ElasticSearch 5.x Context Suggester - single context multiple value
[英]ElasticSearch 5.x Context Suggester NEST .Net
我正在嘗試使用ElasticSearch 5.1.2上的Nest 5.0創建一個帶有上下文建議的索引。
目前,我可以創建映射:
elasticClient.MapAsync<EO_CategoryAutocomplete>(m => m
.Properties(p => p
.Completion(c => c
.Contexts(ctx => ctx
.Category(csug => csug
.Name("lang")
.Path("l")
)
.Category(csug => csug
.Name("type")
.Path("t")
)
.Category(csug => csug
.Name("home")
.Path("h")
)
)
.Name(n => n.Suggest)
)
)
);
但在POCO類我不知道什么對象類型必須是標題為?????的 建議屬性 :
public class EO_CategoryAutocomplete
{
public string Id { get; set; }
public ????? Suggest { get; set; }
}
public class EO_CategoryAC
{
public int Id { get; set; }
public string Name { get; set; }
}
在NEST 5.0中, CompletionField屬性已被刪除(這是在elasticsearch 2.X上執行上下文建議的方法)
請問,任何人都可以舉例說明如何做到這一點嗎?
文檔都是關於查詢的。 建議NEST
謝謝。
Completion和Context Suggester能夠在5.x +的響應中返回_source
,因此不再需要有效負載。 因此,NEST 5.x中的類型現在是CompletionField
,而不是NEST 2.x中的CompletionField<TPayload>
,其中TPayload
是有效負載類型。
這是NEST 5.x的一個例子,可以讓您啟動並運行
public class EO_CategoryAutocomplete
{
public string Id { get; set; }
public IEnumerable<string> L { get; set; }
public CompletionField Suggest { get; set; }
}
void Main()
{
var pool = new SingleNodeConnectionPool(new Uri("http://localhost:9200"));
var connectionSettings = new ConnectionSettings(pool)
.DefaultIndex("autocomplete");
var client = new ElasticClient(connectionSettings);
if (client.IndexExists("autocomplete").Exists)
client.DeleteIndex("autocomplete");
client.CreateIndex("autocomplete", ci => ci
.Mappings(m => m
.Map<EO_CategoryAutocomplete>(mm => mm
.AutoMap()
.Properties(p => p
.Completion(c => c
.Contexts(ctx => ctx
.Category(csug => csug
.Name("lang")
.Path("l")
)
.Category(csug => csug
.Name("type")
.Path("t")
)
.Category(csug => csug
.Name("home")
.Path("h")
)
)
.Name(n => n.Suggest)
)
)
)
)
);
client.IndexMany(new[] {
new EO_CategoryAutocomplete
{
Id = "1",
Suggest = new CompletionField
{
Input = new [] { "async", "await" },
// explicitly pass a context for lang
Contexts = new Dictionary<string, IEnumerable<string>>
{
{ "lang", new [] { "c#" } }
}
}
},
new EO_CategoryAutocomplete
{
Id = "2",
Suggest = new CompletionField
{
Input = new [] { "async", "await" },
// explicitly pass a context for lang
Contexts = new Dictionary<string, IEnumerable<string>>
{
{ "lang", new [] { "javascript" } }
}
}
},
new EO_CategoryAutocomplete
{
Id = "3",
// let completion field mapping extract lang from the path l
L = new [] { "typescript" },
Suggest = new CompletionField
{
Input = new [] { "async", "await" },
}
}
}, "autocomplete");
client.Refresh("autocomplete");
var searchResponse = client.Search<EO_CategoryAutocomplete>(s => s
.Suggest(su => su
.Completion("categories", cs => cs
.Field(f => f.Suggest)
.Prefix("as")
.Contexts(co => co
.Context("lang",
cd => cd.Context("c#"),
cd => cd.Context("typescript"))
)
)
)
);
// do something with suggestions
var categorySuggestions = searchResponse.Suggest["categories"];
}
searchResponse
返回
{
"took" : 2,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 0,
"max_score" : 0.0,
"hits" : [ ]
},
"suggest" : {
"categories" : [
{
"text" : "as",
"offset" : 0,
"length" : 2,
"options" : [
{
"text" : "async",
"_index" : "autocomplete",
"_type" : "eo_categoryautocomplete",
"_id" : "3",
"_score" : 1.0,
"_source" : {
"id" : "3",
"l" : [
"typescript"
],
"suggest" : {
"input" : [
"async",
"await"
]
}
},
"contexts" : {
"lang" : [
"typescript"
]
}
},
{
"text" : "async",
"_index" : "autocomplete",
"_type" : "eo_categoryautocomplete",
"_id" : "1",
"_score" : 1.0,
"_source" : {
"id" : "1",
"suggest" : {
"input" : [
"async",
"await"
],
"contexts" : {
"lang" : [
"c#"
]
}
}
},
"contexts" : {
"lang" : [
"c#"
]
}
}
]
}
]
}
}
用ids "1"
和"3"
建議文件。 您還可以使用源過濾僅從_source
返回您感興趣的字段。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.