インデックスから異なるドキュメントタイプのデータを取得するのにNestを使用しています。書類は連絡先と請求書です。現在、検索ディスクリプタは2つの異なるフィールドでソートされます。私は、ソートがどのように機能するかを示すために、検索記述子を簡素化しました: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」(唯一の請求書ドキュメントはありません)のためのフィールドが含まれていません。私はこの2番目の並べ替えが追加されたときに連絡先(ただし、この情報を含む請求書ではない)のスコアの並べ替えを混乱させることがわかります。つまり、単一の_score並べ替えが連絡先の最高ランクの文書を返しますが、 "invoiceDate")により、最高スコア連絡文書が順番に返されなくなりました。
2次検索フィールドを実際に接触しているフィールド(例: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。あなたがペーストしたURLは残念なことに解決しません(最初の投稿にハイパーリンクは含まれていません)。 – CorribView