ElasticSearch 5.x Context Suggester NEST .Net
我正在尝试在ElasticSearch 5.1.2上使用Nest 5.0的上下文建议器创建索引。
当前,我可以创建映射:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 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类中,我不知道必须是哪种对象类型,建议属性标记为?????:
1 2 3 4 5 6 7 8 9 10 11 | 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
谢谢。
完成和上下文建议者能够在5.x的响应中返回
下面是一个使用NEST 5.x的示例,它可以帮助您启动并运行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | 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"]; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | { "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#" ] } } ] } ] } } |
建议使用ID为