Получение релевантности упорядоченный результат из текстового запроса на коллекции MongoDB с использованием драйвера C # -- c# поле с участием mongodb поле с участием mongodb-.net-driver поле с участием mongodb-query пол Связанный проблема

Retrieve Relevance Ordered Result from Text Query on MongoDB Collection using the C# Driver


1
vote

проблема

русский

Я пытаюсь отправить текстовые запросы коллекции и получить результаты в текстовом порядке. документы объяснить довольно хорошо, как это сделать в оболочке:

 <код> db.articles.find(    { status: "A", $text: { $search: "coffee cake" } },    { score: { $meta: "textScore" } } ).sort( { date: 1, score: { $meta: "textScore" } } )   

Но это требует проекции дополнительного <код> score поле из находки в сортировку.

в C #, у меня есть функция, которая выглядит так:

 <код> public IEnumerable<T> TextSearch<T>(MongoCollection<T> coll, string text) {     var cursor = coll.Find(Query.Text(text))         .SetSortOrder(SortBy<T>.MetaTextScore(???));     foreach(var t in cursor) {         // strip projected score from value         yield return t;     } }   

Но мне не хватает, как проецировать значение «TexScore» в мои результаты, чтобы я мог Укажите столбец к <код> MetaTextScore в <Код> SetSortOrder .

Английский оригинал

I am attempting to text query a collection and retrieve the results in the text match order. The docs explain pretty well how to do this in the shell:

db.articles.find(    { status: "A", $text: { $search: "coffee cake" } },    { score: { $meta: "textScore" } } ).sort( { date: 1, score: { $meta: "textScore" } } ) 

but it requires the projection of the additional score field from the find into the sort.

In C#, I have a function that looks like this:

public IEnumerable<T> TextSearch<T>(MongoCollection<T> coll, string text) {     var cursor = coll.Find(Query.Text(text))         .SetSortOrder(SortBy<T>.MetaTextScore(???));     foreach(var t in cursor) {         // strip projected score from value         yield return t;     } } 

but I am missing how to project the "textScore" value into my results, so that I can specify the column to MetaTextScore in SetSortOrder.

</div
           

Список ответов

4
 
vote
vote
Лучший ответ
 

Я смог получить это работать с помощью проб и ошибок. Хитрость заключается в том, что ваш объект данных должен иметь поле на нем уже, который будет держать <код> MetaTextScore значение. Так что дано интерфейс:

 <код> interface ITextSearchSortable {     double? TextMatchScore { get; set; } }   

Последняя функция выглядит так:

 <код> 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;     } }   

Стоит отметить, что <код> TextMatchScore не может иметь <код> [BsonIgnore] украшения, или будет исключение. Однако он может иметь <код> [BsonIgnoreIfNull] украшения. Поэтому, вычисляя значение от объекта данных, прежде чем приносить его, объект данных может быть сохранен обратно в коллекцию, не вкладывая значение мусора.

 

I was able to get this working through trial and error. The trick is that your data object needs to have a field on it already that will hold the MetaTextScore value. So given the interface:

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

the final function looks like this:

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;     } } 

It's worth noting that TextMatchScore can't have a [BsonIgnore] decoration, or there will be an exception. However, it can have a [BsonIgnoreIfNull] decoration. So by scrubbing the value off the data object before yielding it, the data object can be saved back into the collection without putting in a garbage value.

</div
 
 

Связанный проблема

0  Wpf keypreview windows ключ и второй ключ  ( Wpf keypreview windows key and second key ) 
Я реализую приложение WPF в C # 4.5 для Windows 7, и я хотел бы иметь возможность схватить событие, когда пользователь нажимает клавишу Windows и C. Я реали...

-1  Право оправдании десятичного массива в C #?  ( Right justifying decimal array in c ) 
У меня есть проект для моего класса программирования C #; Написание программы, которая может прочитать файл работника и файл продаж и обрабатывать два. Я зако...

0  Сообщение об ошибке Wile пытается открыть файл .xls  ( Error message wile trying to open xls file ) 
Я создаю файл Excel на лету для отправки его вложение в электронном письме. Соответствующий фрагмент кода приведен ниже (это консольное приложение) <код> pu...

0  1002 Ошибка API Вызов PayPal Sandbox  ( 1002 error api call paypal sandbox ) 
Я создал учетную запись PayPal Sandbox, и создал пользователь, и у меня есть все учетные данные, осмотр этого правильных учетных данных, которые он несколько ...

0  NU1701, NU1202 Восстановление пакета Восстановление на свежей установке Windows / VS  ( Nu1701 nu1202 package restore errors on fresh windows vs setup ) 
Работа в команде, у нас есть решение в Git, который разрабатывается на 3 разных DEV. Я временно ушел на разное место с моим ноутбуком, где у меня свежая Win 1...

0  C # Обработка исключений на класс  ( C sharp class wide exception handling ) 
Можно ли удалить исключения в одном месте в файле класса C #? Я кодирую некоторые модульные тесты в NUNIT для проверки веб-службы WCF, и на всех методах / т...

1  Mongodb C # LINQ сгерированный запрос  ( Mongodb c sharp linq generated query ) 
Как я могу получить сгенерированный запрос из запроса LINQ? Я попробовал это, но это не работало: <код> var query = ( from d in mcollection.AsQu...

4  Трудно запустить параллельные вставки на SQLite базу данных в C #  ( Difficulty running concurrent inserts on sqlite database in c sharp ) 
Я запускаю ряд потоков, которые каждая попытка выполнить вставки в одну базу данных SQLite. Каждый поток создает собственную связь с БД. Каждый из них создает...

0  Тест подразделения для класса банка в C #  ( Unit test for bank class in c sharp ) 
Я учусь создавать модульные тесты для проекта, написанного в C #. Я был следовать примеру на веб-сайте MSDN, и теперь я только что застрял на том, как создать...

1  Узор сопоставления Regex внутри шаблона упаковки  ( Regex match pattern inside a wrapping pattern ) 
Я хочу сопоставить все номера телефонов, которые обернуты между & lt; и & gt; & gt; Теги. Это регулярное выражение для телефонов: <код> 0[2349]{1}-[1-9]{1}...

2  Несколько клиентских проектов на один серверный проект W / Silverlight & Ria Services Beta  ( Multiple client projects to one server project w silverlight ria services bet ) 
Тип или имя пространства имен «Ресурсы» не существует в «MyWebProject.Web» (Вы пропустите сборку Ссылка?) C: users ... mysecondproject generated_...

1  Есть ли способ генерировать GUID из списка руководств?  ( Is there a way to generate a guid from a list of guids ) 
У меня есть список объектов, которые они имеют GUID для IDS. Я хочу использовать идентификаторы в этом списке объектов для создания GUID, который я могу испол...

0  Запустить функцию JavaScript с использованием C #  ( Trigger javascript function using c sharp ) 
Я должен написать класс C #, который получает содержимое HTML-страницы (страница публичная) и запускает функцию JavaScript, которая загружает файл. Моя цель...

3  C # PropertiveGrid Drag Drop  ( C sharp propertygrid drag drop ) 
Я пытаюсь реализовать поддержку перетаскивания / падения на свойств в C # с использованием VS2005 (.NET 2.0). Собственность могут обрабатывать драгерацию и т....

0  Событие ListBox после сканирования штрих-кода  ( Listbox event after barcode scanning ) 
Я использую ListBox в окне приложение, мой список имеет некоторое количество штрих-кодов. Я хочу отсканировать их с помощью Reader barcode, а затем хочу пер...




© 2021 www.qaru.top All Rights Reserved. Q&A House все права защищены


Licensed under cc by-sa 3.0 with attribution required.