0
我正在使用Nest從索引中檢索具有不同文檔類型的數據。這些文件是:聯繫人和發票。目前,搜索描述符分爲兩個不同的字段。我已經簡化了搜索描述符,以顯示排序是如何工作的:對Elasticsearch文檔的二級排序無法正常工作
descriptor.Index(index)
.Type(esDocumentTypes)
.Query(q => q
.Bool(bq => bq
.Must(BuildMustClause(typeCodesForFilters))
.Should(BuildShouldClause(typeCodesForFilters))
.MustNot(BuildMustNotClause())
.MinimumShouldMatch(1)
)
)
.Routing(RoutingValue)
.Size(DefaultMaxResults)
.TrackScores()
.Sort(st => st.Field(f => f.Field("_score").Descending()))
.Sort(st => st.Field(f2 => f2.Field("invoiceDate").Descending().IgnoreUnmappedFields()))
文檔類型接觸不包含字段「invoiceDate」(僅發票憑證一樣)。我發現,當添加第二種排序時,它會隨着聯繫人的排序(但不包含包含此信息的發票)而混亂,即只有單一的_score排序返回聯繫人中排名最高的文檔,但添加輔助排序字段( 「invoiceDate」)現在會導致最高分數的聯繫人文檔沒有按順序返回。
當我用一個實際接觸的輔助搜索字段(例如contactName)替換時,我發現返回了正確排序的結果。
感謝您的反饋意見。沒有Missing方法,但我嘗試使用MissingValue(它接受一個字符串),它不起作用。我試了兩個字符串「0」和DateTime.Now.ToString(CultureInfo.InvariantCulture) – CorribView
嘿,我可能會缺少的語法。我知道上面的JSON查詢版本。可以是'https:// www.elastic.co/guide/en/elasticsearch/client/net-api/current/sort-usage.html#_fluent_dsl_example_19'這可以幫助你。 – Richa
Thaks。您粘貼的網址不能很好地解析(您發佈的第一篇文章中包含的超鏈接也不包括在內) – CorribView