(已实现)相似度到大数据查找之Mysql 文章匹配的一些思路与提高查询速度

需求,最近实现了文章的原创度检测功能,处理思路一是分词之后做搜索引擎匹配飘红,另一方面是量化词组,按文章、段落、句子做数据库查询,功能基本满足实际需求。

接下来,还需要在海量大数据中快速的查找到与一句或者一段话最相关的文章、段落。

上一篇随笔里记录有当时的一些想法,今天下午按想法具体实现并测试了一次,速度比直接分组查询肯定快了很多很多,回顾下我的实现步骤:

压缩"语料库,即提取特征词或词频,做量化处理之后以“列向量”形式保存到数据库;然后按前N组词拼为向量组,以供查询使用,即组合为1到N字的组合,量化后以“行向量”形式保存到数据库(目前是用MYSQL),计算和查询相似度的时候先提取特征,然后量化,再查询各Long型数值字段,速度应该会较一般查询要快一些。

应用举例:[下午实现了具体想法,目前系统正在处理数据中,预计会在八千万行的数据集,相信查询速度应该还可以]

【查询测试】查询以下特征

            Dictionary<string, int> words = new Dictionary<string, int>();
            words.Add("五笔", 1);
            words.Add("拼音", 1);
            words.Add("笔画", 1);
            words.Add("其它", 1);
            words.Add("英盘", 1);
            words.Add("美盘", 1);
            words.Add("法盘", 1);

            //List<Dictionary<int, long>> WordList = new List<Dictionary<int, long>>();

            //for (int i = 0; i < 15; i++)
            //{
            //    WordList.Add(GetWordSecurity(words, i + 1));
            //}
            //直观看数据
            Dictionary<int, long> R1 = GetWordSecurity(words, 1);
            Dictionary<int, long> R2 = GetWordSecurity(words, 2);
            Dictionary<int, long> R3 = GetWordSecurity(words, 3);
            Dictionary<int, long> R4 = GetWordSecurity(words, 4);
            Dictionary<int, long> R5 = GetWordSecurity(words, 5);
            Dictionary<int, long> R6 = GetWordSecurity(words, 6);
            Dictionary<int, long> R7 = GetWordSecurity(words, 7);
            Dictionary<int, long> R8 = GetWordSecurity(words, 8);
            Dictionary<int, long> R9 = GetWordSecurity(words, 9);
            Dictionary<int, long> R10 = GetWordSecurity(words, 10);
            Dictionary<int, long> R11 = GetWordSecurity(words, 11);
            Dictionary<int, long> R12 = GetWordSecurity(words, 12);
            Dictionary<int, long> R13 = GetWordSecurity(words, 13);
            Dictionary<int, long> R14 = GetWordSecurity(words, 14);

【量化数据】我选的是MD5->Long做量化

五笔 -8683246507546018072
拼音 5720075168044685354
笔画 6444854990336207024
其它 -4797408270696495584
英盘 -1741849883950345011
美盘 4116094244106799890
法盘 5071717547464226258

【查询】 根据实际需求(即相关度要求)仅仅只需要取以下列表中的一个值做为查询条件。即,通过分词-做词行向量排列,特征列向量排列将文章映射成ID,这样我们

就可以通过 Select .. From T Where Long1= Value 实现文章相关度的查询【根据相关度要求可随时改变查询字段LongN】

   二字词   Dictionary<int, long> R1 = GetWordSecurity(words, 1);

+  [0] {[1, -2963171339501332718]} System.Collections.Generic.KeyValuePair<int,long>
+  [1] {[2, -2238391517209811048]} System.Collections.Generic.KeyValuePair<int,long>
+  [2] {[3, 4966089295467037960]} System.Collections.Generic.KeyValuePair<int,long>
+  [3] {[4, -6281813915328659238]} System.Collections.Generic.KeyValuePair<int,long>
+  [4] {[5, 922666897348189770]} System.Collections.Generic.KeyValuePair<int,long>
+  [5] {[6, 3978225284094340343]} System.Collections.Generic.KeyValuePair<int,long>
+  [6] {[7, -8610574661558066372]} System.Collections.Generic.KeyValuePair<int,long>
Dictionary<int, long> R2 = GetWordSecurity(words, 2);

以上测试在今天下午全部完成编码及测试,现在我的系统正在做数据抓取和量化处理,初步预计数据集八千万行左右,做了好几年程序,这是咱第一次处理超百万行数据呢。

时间: 2024-12-15 16:42:19

(已实现)相似度到大数据查找之Mysql 文章匹配的一些思路与提高查询速度的相关文章

“度娘”大数据带你转型升级带你飞

刚推出“直达号”不久的度娘再次升级“连接”能力. 9月24日,度娘正式发布“智慧商业平台”,这是百度面向传统企业推出的智能数据合作平台,整合了度娘大数据.地图LBS等一系列产品和技术. 而这也是继度娘推出全球首个开放大数据引擎,“直达号”之后,度娘在数据合作领域对传统行业的智能化转型再次升级. 在筱瞧看来,开放大数据引擎啊.开放云.数据工厂.百度大脑在内的大数据能力开放给传统企业,或许还只是一个战略方向的宣言,在这之前,如何聚焦于大数据实践和行业合作则需要进一步“摸石头过河”,而“直达号”的推出

单表60亿记录等大数据场景的MySQL优化和运维之道 | 高可用架构(转)

转自http://www.php1.cn/Content/DanBiao_60_YiJiLuDengDaShuJuChangJingDe_MySQL_YouHuaHeYunWeiZhiDao_%7C_GaoKeYongJiaGou.html, 更多详细资料请参看原文 此文是根据杨尚刚在[QCON高可用架构群]中,针对MySQL在单表海量记录等场景下,业界广泛关注的MySQL问题的经验分享整理而成,转发请注明出处. 杨尚刚,美图公司数据库高级DBA,负责美图后端数据存储平台建设和架构设计.前新浪高

es 在数据量很大的情况下(数十亿级别)如何提高查询效率啊?

面试题es 在数据量很大的情况下(数十亿级别)如何提高查询效率啊?面试官心理分析这个问题是肯定要问的,说白了,就是看你有没有实际干过 es,因为啥?其实 es 性能并没有你想象中那么好的.很多时候数据量大了,特别是有几亿条数据的时候,可能你会懵逼的发现,跑个搜索怎么一下 5~10s,坑爹了.第一次搜索的时候,是 5~10s,后面反而就快了,可能就几百毫秒.你就很懵,每个用户第一次访问都会比较慢,比较卡么?所以你要是没玩儿过 es,或者就是自己玩玩儿 demo,被问到这个问题容易懵逼,显示出你对

数据提高查询速度的方法(摘抄)

处理百万级以上的数据提高查询速度的方法: 1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 3.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:     select id from t where num is null     可以在num上设置默认值0,确保表中num列没有

处理百万级以上的数据提高查询速度的方法

处理百万级以上的数据提高查询速度的方法: 1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 3.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:     select id from t where num is null     可以在num上设置默认值0,确保表中num列没有

【转】处理百万级以上的数据提高查询速度的方法

处理百万级以上的数据提高查询速度的方法: 1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 3.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:     select id from t where num is null     可以在num上设置默认值0,确保表中num列没有

处理百万级以上的数据提高查询速度的方法(收藏)

处理百万级以上的数据提高查询速度的方法: 1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 3.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:     select id from t where num is null     可以在num上设置默认值0,确保表中num列没有

sql处理百万级以上的数据提高查询速度的方法

sql处理百万级以上的数据提高查询速度的方法 处理百万级以上的数据提高查询速度的方法: 1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 3.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:     select id from t where num is null     可

《转》sql处理百万级以上的数据提高查询速度的方法

处理百万级以上的数据提高查询速度的方法: 1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 3.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:     select id from t where num is null     可以在num上设置默认值0,确保表中num列没有