关于全文检索的解决方案实现

在海量数据中实现快速全文检索,本文介绍了三种解决方案:1) Lucene结合分词器,适合静态数据;2) 利用mongodb的英文全文检索原理处理中文,适用于对实时性要求不高的场景;3) 引入NRediSearch,解决数据同步和效率问题,提供更优的全文检索体验。每种方案都有其适用的业务场景和实现步骤。
摘要由CSDN通过智能技术生成

应用场景
需要在大量数据中完成快速检索

解决方案1:Lucene+分词器

批量创建索引后使用可以满足需求,但是也无需求对数据的实时性要求较高,会频繁更新索引,这时候索引操作就较慢。那么就有了下面的优化方案。

解决方案2:mongodb全文检索

由于mongodb本身不自带中文全文检索功能,那么如何来利用高效的英文全文检索呢?
考虑:英文全文检索实现就是按照空格划分内容,例:hello world,英语句子中都会按照空格划分单词。现在有没有一点思路,所以考虑只需要把内容分词按照空格分开存放一个字段,这样是不是和英文有点像。
业务场景:(和我们平常遇到的全文检索有点不一样)
每一条数据有一个热词统计,首先就需要实现分词及词频统计,然后这些结果存储数据库,最后我们的检索需要通过这些热词来进行检索。
这就是不同之处,大家一般需要的是检索整篇文章中包含搜索关键字的记录。
实现分三步: 创建索引、写数据(写入分词好的数据)、查询
上代码:

using DataSync;
using DataSync.Model;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using MongoDB.Driver;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;

namespace DataSyncTests
{
   
    [TestClass]
    public class UnitMongoDBTextSearch
    {
   
        [TestMethod]
        public void CreateIndexKey()
        {
   
            var keys = Builders<CommentPOTest>.IndexKeys.Text(x => x.Segments);
            MongoHelper.GetCollection<CommentPOTest>().Indexes.CreateOne(new CreateIndexModel<CommentPOTest>(keys));
        }

        [TestMethod]
        public void WriteData()
        {
   
            var cursor = MongoHelper.GetCollection<CommentPO>().Find(x => true).ToCursor();
            //MongoHelper.GetCollection<CommentPOTest>().InsertOne(new CommentPOTest { });
            List<CommentPOTest> tests 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值