I am using this MongoDB driver: https://mongodb.github.io/mongo-csharp-driver/ and I would like to search using a text index, which (I think) is created on all text fields like so:
{
"_fts" : "text",
"_ftsx" : 1
}
Run Code Online (Sandbox Code Playgroud)
I am using linq queries to filter the data, example:
MongoClient client = new MongoClient(_mongoConnectionString);
IMongoDatabase mongoDatabase = client.GetDatabase(DatabaseName);
var aCollection = mongoDatabase.GetCollection<MyTypeSerializable>(CollectionName);
IMongoQueryable<MyTypeSerializable> queryable = aCollection.AsQueryable()
.Where(e=> e.Field == 1);
var result = queryable.ToList();
Run Code Online (Sandbox Code Playgroud)
How do I utilize the text search using this method?
寻找解决方案我找到了FilterDefinition<T>.Inject()扩展方法。所以我们可以更深入地创建一个更多的扩展IMongoQueryable<T>:
public static class MongoQueryableFullTextExtensions
{
public static IMongoQueryable<T> WhereText<T>(this IMongoQueryable<T> query, string search)
{
var filter = Builders<T>.Filter.Text(search);
return query.Where(_ => filter.Inject());
}
}
Run Code Online (Sandbox Code Playgroud)
并像这样使用它:
IMongoDatabase database = GetMyDatabase();
var results = database
.GetCollection<Blog>("Blogs")
.AsQueryable()
.WhereText("stackoverflow")
.Take(10)
.ToArray();
Run Code Online (Sandbox Code Playgroud)
希望这对某人有所帮助:)
| 归档时间: |
|
| 查看次数: |
3622 次 |
| 最近记录: |