0
이것은 인덱싱 코드입니다. 특히 City 필드는 검색 및 집계를위한 다중 필드입니다. 몇 개의 분석기도 사용하십시오. 도시 필드 만 집계해야합니다.ElasticSearch C# 클라이언트 (NEST) : ES 5.5.0을 사용하여 집계 결과를 얻으려면
client.CreateIndex(IndexName, c => c
.Settings(s => s
.Analysis(a => a
.Analyzers(an => an
.Custom("index_analyzer", ca => ca
.Tokenizer("standard")
.Filters("standard", "lowercase", "stop"))
.Custom("search_analyzer", ca => ca
.Tokenizer("standard")
.Filters("standard", "lowercase", "stop"))
)
)
)
.Mappings(m => m
.Map<EmployeeInfo>(mm => mm
.AutoMap()
.Properties(p => p
.Text(t => t
.Name(n => n.Employee_Num)
.Analyzer("index_analyzer")
.SearchAnalyzer("search_analyzer"))
.Text(t => t
.Name(n => n.First_Name)
.Analyzer("index_analyzer")
.SearchAnalyzer("search_analyzer"))
.Text(t => t
.Name(n => n.Last_Name)
.Analyzer("index_analyzer")
.SearchAnalyzer("search_analyzer"))
.Text(t => t
.Name(n => n.Address)
.Analyzer("index_analyzer")
.SearchAnalyzer("search_analyzer"))
.Text(t => t
.Name(n => n.City)
.Fields(f => f
.Text(tt => tt
.Name("mytext")
.Analyzer("index_analyzer")
.SearchAnalyzer("search_analyzer"))
.Keyword(k => k
.Name("keyword")
.IgnoreAbove(256)
)))
.....
내가 ... 이런 식으로 terms.Buckets을
var result = client.Search<EmployeeInfo>(s => s
.Index("employee")
.Aggregations(a => a
.Terms("field1", t => t.Field(k => k.City.Suffix("keyword"))
.MinimumDocumentCount(2)
.Size(100)
.ExecutionHint(TermsAggregationExecutionHint.Map))
)
);
bool valid = result.IsValid;
var dataList = new List<Tuple<string, long>>();
var terms = result.Aggs.Terms("field1");
if (terms != null)
{
foreach (var bucket in terms.Buckets)
{
string data = bucket.Key;
long count = (long)bucket.DocCount;
dataList.Add(new Tuple<string, long>(data, count));
}
// To Sort by Alphabets
if (sortAlphbetically)
return dataList.OrderBy(t => t.Item1).ToList();
// To Sort by count
return dataList.OrderByDescending(t => t.Item2).ToList();
}
return dataList;
}
그것을 집계하고 항상 비어 있습니다. 여기에 도시에 대한 집계 값을 얻는 방법? ES 5.5.0
''IndexName'은''employee "'입니까? –
예, INdexName은 employee입니다. –