Хорошо, я попытался найти решение внутри ExpressionFilterDefinition
(MongodbDriver
преобразует лямбда-выражение в этот фильтр) и потерпел поражение.
Таким образом, прямой полнотекстовый поиск не поддерживается лямбда-выражением. Я включил свое воображение и создал обходной путь для этой задачи. Я сделал абстрактный класс для объекта dto, который использует полнотекстовый индекс
public abstract class FullTextSearchEntity
{
[BsonElement("$text"), BsonIgnoreIfNull]
public FullTextSearchOption FullTextSearch { get; set; }
}
Как вы можете догадаться, FullTextSearchOption
повторяет структуру BSON для использования полнотекстового индекса
public class FullTextSearchOption
{
[BsonElement("$search"), BsonIgnoreIfNull]
private string Search { get; set; }
public FullTextSearchOption(string search)
{
Search = search;
}
}
И, наконец, я добавил спецификацию для использования этого обходного пути:
public class FullTextSearchSpecification<T> : SpecificationBase<T> where T: FullTextSearchEntity
{
private readonly string _searchQuery;
public FullTextSearchSpecification(string searchQuery)
{
_searchQuery= searchQuery;
}
public override Expression<Func<T, bool>> ToExpression()
{
return entity=> entity.FullTextSearch == new FullTextSearchOption(_searchQuery);
}
}
Корзина go!