我正在使用NEST(c#)与Elasticsearch 1.7.3版进行通信
我正在传递一个字符串并尝试在该字符串中匹配多个字段。 我正在获得要点,以确定字符串中匹配的字段数。 从Hits.Select。
中撤回结果但问题是,有时亮点中最匹配的字段不会出现在Hits.Select列表的顶部。 有什么可以设置的吗??
var result = this.client.Search<PInfo>(s => s
.Take(20)
.TrackScores(true)
.Query(q => q
.MultiMatch(m => m
.Type(TextQueryType.CrossFields)
.OnFieldsWithBoost(b => b
.Add(f => f.A, 1.0)
.Add(f => f.B, 1.0)
.Add(f => f.C, 1.0)
)
.Operator(Operator.Or)
.Query(text)
))
.Highlight( h => h
//.PreTags("<b>")
//.PostTags("</b>")
.OnFields(
fk => fk.OnField( a => a.A),
fk => fk.OnField( a => a.B),
fk => fk.OnField( a => a.C)
)
)
.Sort(sort => sort.OnField("_score").Descending())
);
string value = result.ConnectionStatus.ToString();
return result
.Hits
.Select(c => new PInfo
{
Id = c.Source.Id,
A = c.Source.A,
B = c.Source.B,
C = c.Source.C,
IndexedOn = c.Source.IndexedOn,
Highlights = c.Highlights // returning the highlights too from here
})
.ToList();
答案 0 :(得分:0)
这应该得到理想的结果。
return result
.Hits
.Select(c => new PatientInfo
{
Id = c.Source.Id,
Patient_Num = c.Source.Patient_Num,
First_Name = c.Source.First_Name,
Last_Name = c.Source.Last_Name,
Full_Name = c.Source.Full_Name,
Address = c.Source.Address,
City = c.Source.City,
State = c.Source.State,
Zip = c.Source.Zip,
Relation_Code = c.Source.Relation_Code,
DOB = c.Source.DOB,
Sex = c.Source.Sex,
IndexedOn = c.Source.IndexedOn,
Highlights = c.Highlights
})
.OrderByDescending(t => t.Highlights.Count).ToList();