目錄:php
Elasticsearch.Net、NEST 交流羣:523061899html
[String(Name = "Name",Index = FieldIndexOption.NotAnalyzed)] public string Name { get; set; } [String(Name = "Dic", Index = FieldIndexOption.Analyzed,Analyzer = "ik_max_word")] /// <summary> /// keyword 不分詞 /// </summary> [Keyword(Name = "Name", Index = true)] public string Name { get; set; } /// <summary> /// text 分詞,Analyzer = "ik_max_word" /// </summary> [Text(Name = "Dic", Index = true, Analyzer = "ik_max_word")] public string Dic { get; set; }
注:5.x已將string標記爲過期特性,下個版本將移除;elasticsearch
滾動掃描支持並行執行提升獲取數據效率;post
2.xurl
public void SearchScanScroll(string indexName) { string scrollid = ""; var result = _client.Search<TestModel2>(s => s.Index(indexName).Query(q => q.MatchAll()) .Size(10) //todo:2x中的SearchType.Scan,5.x移除 .SearchType(SearchType.Scan) .Scroll("1m")); scrollid = result.ScrollId; int count = 0; while (true) { //獲得滾動掃描的id //執行滾動掃描獲得數據 返回數據量是 result.Shards.Successful*size(查詢成功的分片數*size) var result1 = _client.Scroll<TestModel2>("1m", scrollid); if(result1.Documents==null || !result1.Documents.Any()) break; foreach (var info in result1.Documents) { count++; Console.WriteLine(info.Id+" - "+ count); } //獲得新的id scrollid = result1.ScrollId; } }
5.xspa
Action<int> sc1 = (id) => { string scrollid = ""; //todo:5.x 多了Slice設置 移除SearchType.Scan var result = _client.Search<TestModel5>(s => s.Index(indexName).Query(q => q.MatchAll()) .Size(15) .Sort(st=>st.Descending(ds=>ds.Id)) .Scroll("1m") //id從0開始 0,1,2... //length=max //例:max=3 id=0,id=1,id=2 .Slice(sl => sl.Id(id).Max(3)) ); //獲得滾動掃描的id scrollid = result.ScrollId; foreach (var info in result.Documents) { Console.WriteLine(info.Id + " - " + " -批次count " + result.Documents.Count + " - 線程"+Thread.CurrentThread.ManagedThreadId); } while (true) { //執行滾動掃描獲得數據 返回數據量是 result.Shards.Successful*size(查詢成功的分片數*size) var result1 = _client.Scroll<TestModel5>("1m", scrollid); if (result1.Documents == null || !result1.Documents.Any()) break; foreach (var info in result1.Documents) { Console.WriteLine(info.Id + " - " +" -批次count "+ result1.Documents.Count+ " - 線程" + Thread.CurrentThread.ManagedThreadId); } //獲得新的id scrollid = result1.ScrollId; } }; var t1= Task.Factory.StartNew(() => { sc1(0); }); var t2= Task.Factory.StartNew(() => { sc1(1); }); var t3= Task.Factory.StartNew(() => { sc1(2); }); t1.Wait(); t2.Wait(); t3.Wait();
注:5.x 增長了Slice設置可並行拉取全量數據,移除SearchType.Scan,首次查詢Search時也返回結果,2.x中設置SearchType.Scan首次Search只返回ScrollId。.net
注:5.x中新增深度分頁方案深度分頁線程
聚合結果解析code
2.xhtm
var vendorIdGroup = (BucketAggregate)result.Aggregations["Group_Group"]; foreach (var bucket1 in vendorIdGroup.Items) { //todo:2.x KeyedBucket var bucket = (KeyedBucket)bucket1; var maxPrice = ((ValueAggregate)bucket.Aggregations["Dvalue_Max"]).Value; }
5.x
var vendorIdGroup = (BucketAggregate)result.Aggregations["Group_Group"]; foreach (var bucket1 in vendorIdGroup.Items) { //todo:5.x KeyedBucket<T> var bucket = (KeyedBucket<object>) bucket1; var maxPrice = ((ValueAggregate)bucket.Aggregations["Dvalue_Max"]).Value; }
一些新的特性或接口會持續補充。