sql >> Databáze >  >> NoSQL >> MongoDB

Načtěte uspořádaný výsledek podle relevance z textového dotazu na kolekci MongoDB pomocí ovladače C#

Podařilo se mi to získat pomocí pokusů a omylů. Trik je v tom, že váš datový objekt již musí mít pole, které bude obsahovat MetaTextScore hodnota. Takže vzhledem k rozhraní:

interface ITextSearchSortable {
    double? TextMatchScore { get; set; }
}

konečná funkce vypadá takto:

public IEnumerable<T> TextSearch<T>(MongoCollection<T> coll, string text) where T:ITextSearchSortable {
    var cursor = coll.Find(Query.Text(text))
        .SetFields(Fields<T>.MetaTextScore(t => t.TextMatchScore))
        .SetSortOrder(SortBy<T>MetaTextScore(t => t.TextMatchScore));
    foreach(var t in cursor) {
        // prevent saving the value back into the database
        t.TextMatchScore = null;
        yield return t;
    }
}

Stojí za zmínku, že TextMatchScore nemůže mít [BsonIgnore] dekorace, nebo bude výjimka. Může však mít [BsonIgnoreIfNull] dekorace. Takže odstraněním hodnoty z datového objektu před jejím poskytnutím lze datový objekt uložit zpět do kolekce, aniž by bylo nutné vložit nesmyslnou hodnotu.




  1. Ladění Java Garbage Collection pro HBase

  2. Problémy s instalací Mongodb na Ubuntu 20.04

  3. Proces work-horse byl neočekávaně ukončen RQ a Scrapy

  4. Jak efektivně provádět různé funkce s více klíči?