折磨我几天的问题今天终于解决了,分享一下近期solr使用的一些经验。

本来是用nutch在爬取页面,可是客户需要爬取RSS,而且可以识别那些页面是通过RSS源抓取出来的。nutch虽然自带解析RSS的插件,但是有些RSS解析不了,也不好控制,更重要的抓取后和普通页面就没什么太大的区别了,不能识别不能判断是由哪个rss源抓取出来的。因为上面原因,所以就自己用C#写了一个配合Solr抓取RSS的工程。

一切实现好后,客户非常满意,我也觉得做的还不错,可是过了一段时间后发现nutch在solrdedup时失败了,导致nutch不能使用。下面就把rss实现的原理,和问题的产生进行介绍,解决solr和nutch这些问题不是因为非常难理解,主要是这类问题在网上很难找到。由于公司没有外网和拷贝权限,所有的一切只能凭我的记忆写出来了。

 RSS+Solr的实现是利用webrequest读取到rss源的xml格式的内容,直接里面post方式为solr建立索引。为了达到客户的要求,我在solr的schame里面添加了rss和isrss字段,rss为rss源的url地址,isrss固定为ture。由于nutch没有这2个字段,所以我们查询rss只需 输入 isrss:"true"就可以过滤掉不是rss出来的页面。

实现过程中主要要注意下面几点

1.rss源并不是后缀为xml的文件,有些就是普通页面response出来的,而且有些是需要登录权限的

2.rss目前主要有2种格式,普遍的xml结构为rss/channel/item ,另外一种就是我们博客园rss的结构feed/entry。

里面的标签是固定的,可以通过不同的标签找到solr里面filed需要的值

3.id,digest,tstamp三个栏位是必须要的。

上面提到nutch 运行到solrdedup时就报错,开始我以为是solr里面新加的2个字段,尝试为nutch也新增2个字段,而且还利用nutch的静态栏位插件和额外栏位插件,但是没有用,最后我发现把solr的数据清除后居然nutch可以正常运行,我在google里面也查了很多,但是基本没什么帮助,还以为是solr cache的原因。今天刚好有点空,所以我找到了nutch的报错文件solrdeleteduplicates.java,研究发现里面nutch去除重复是从solr直接取了id,digest,tstamp字段,没有判断是否为空就直接使用了。

但是我写的程序里面digest和tsamp是没有添加的,果然添加完这2个栏位,把所有没有这2个栏位的数据全部补完整,nutch又可以正常运行了

4.digest是网页的32位哈希值,用来nutch去除重复时进行比较差异

5.solr是可以直接通过请求url对内容进行新增,修改,删除,其中修改的格式与新增一样

 主要核心为:xx.xx.xx.xx/solr/update?stream.body=<add><doc><field name="xx">xx</filed></doc><add>&stream.contentType=text/xm;charset=utf-8&commit=true

如果内容有ur格式和html格式需要对其进行转码

6,solr的时间是GMT格式的时间,所以不要弄错,而且rss里面的GMT格式有些是不对的,我就遇到了很多,星期不对都会引起solr index失败。

现在信息都还是比较齐全,搜索还是比较方便的,但是还是有很多问题需要解决,主要是js生成页面不能读取,还有页面上信息的过滤。获取文章的主要内容,过滤导航等其他信息还是比较难的,目前我查到的别人是根据统计规律在进行过滤,比如导航条中间很多是用|分开的,内容里面的空格间隔等。每个站点的html布局风格不一样,标签这些很难统一,百度,谷歌也不知道是怎么实现的,或者它们其实也没有实现。

nutch还是比较强大的,但是总觉得不好维护和修改,上次编译一下源代码都费了很长时间,solr的查询也是比较高效的。 可能计划写一个.net版本的爬虫和搜索,但是只是在计划中,因为涉及到的问题太多了...

C#读取RSS源,并利用Solr索引的更多相关文章

  1. 利用Feed43为网站自制RSS源

    什么是RSS,它可以做什么 快2020年了,RSS日渐式微,我也是去年机缘巧合下才开始使用的,以前只是听说过.RSS,全称Really Simple Syndication,又称简易信息聚合(也叫聚合 ...

  2. 利用SOLR搭建企业搜索平台 之——Solr索引基本操作

    来源:http://blog.csdn.net/zx13525079024/article/details/25367239 我们来看下通过界面来操作SOLR,包括SOLR索引的添加,查询等基本操作. ...

  3. 使用solrj操作solr索引库,solr是lucene服务器

    客户端开发 Solrj 客户端开发 Solrj Solr是搭建好的lucene服务器 当然不可能完全满足一般的业务需求 可能 要针对各种的架构和业务调整 这里就需要用到Solrj了 Solrj是Sol ...

  4. solr索引

    solr索引 当我们真正进入到Lucene源代码之中的时候,我们会发现: • Lucene的索引过程,就是按照全文检索的基本过程,将倒排表写成此文件格式的过程. • Lucene的搜索过程,就是按照此 ...

  5. Solr初始化源码分析-Solr初始化与启动

    用solr做项目已经有一年有余,但都是使用层面,只是利用solr现有机制,修改参数,然后监控调优,从没有对solr进行源码级别的研究.但是,最近手头的一个项目,让我感觉必须把solrn内部原理和扩展机 ...

  6. 使用Solr索引MySQL数据

    环境搭建 1.到apache下载solr,地址:http://mirrors.hust.edu.cn/apache/lucene/solr/ 2.解压到某个目录 3.cd into D:\Solr\s ...

  7. 利用SOLR搭建企业搜索平台 之——MultiCore

    Solr Multicore 是 solr 1.3 的新特性.其目是一个solr实例,可以有多个搜索应用. 下面着手来将solr给出的一个example跑出来.这篇文章是基于<利用SOLR搭建企 ...

  8. 使用solrj操作solr索引库

    (solrj)初次使用solr的开发人员总是很郁闷,不知道如何去操作solr索引库,以为只能用<五分钟solr4.5教程(搭建.运行)>中讲到的用xml文件的形式提交数据到索引库,其实没有 ...

  9. 《机器学习实战》中贝叶斯分类中导入RSS源例子

    跟着书中代码往下写在这里卡住了,考虑到可能还会有其他同学也遇到了这样的问题,记下来分享. 先吐槽一下,相信大部分网友在这里卡住的主要原因是伟大的GFW,所以无论是软件FQ还是肉身FQ的小伙伴们估计是无 ...

随机推荐

  1. POJ1904:King's Quest(强连通+思维)

    King's Quest Time Limit: 15000MS   Memory Limit: 65536K Total Submissions: 10352   Accepted: 3815 题目 ...

  2. How far away ? LCA求树上两点距离

    How far away ? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  3. bzoj 3246 [Ioi2013]Dreaming 贪心

    [Ioi2013]Dreaming Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 638  Solved: 241[Submit][Status][Di ...

  4. android Handler post sendMessage

    Handler 为Android操作系统中的线程通信工具,包为android.os.Handler. 与Handler绑定的有两个队列,一个为消息队列,另一个为线程队列.Handler可以通过这两个队 ...

  5. UVA129 暴力dfs,有许多值得学习的代码

    紫书195 题目大意:给一个困难的串,困难的串的定义就是里面没有重复的串. 思路:不需要重新对之前的串进行判重,只需要对当前的加入的字符进行改变即可. 因为是判断字典序第k个的字符串,所以要多一个全局 ...

  6. mysql 在查询结果中进行二次查询

    第一次查询:查询身份证编号和出现次数 select cardid,count(cardid) as total from p_person_info group by cardid 在第一次查询结果进 ...

  7. Google 字体API的基本使用

    一.链接CSS文件直接使用: 基本上你链接直接在Google.com上的CSS文件.通过网址参数,你可以选择你想要的字体,以及这些字体的变化. <link rel="styleshee ...

  8. Java中哈希表(Hashtable)是如何实现的

    Java中哈希表(Hashtable)是如何实现的 Hashtable中有一个内部类Entry,用来保存单元数据,我们用来构建哈希表的每一个数据是Entry的一个实例.假设我们保存下面一组数据,第一列 ...

  9. 【Atcoder】CODE FESTIVAL 2017 qual A D - Four Coloring

    [题意]给定h,w,d,要求构造矩阵h*w满足任意两个曼哈顿距离为d的点都不同色,染四色. [算法]结论+矩阵变换 [题解] 曼哈顿距离是一个立着的正方形,不方便处理.d=|xi-xj|+|yi-yj ...

  10. Windows Server 2008 R2英文版修改桌面主题(Win7主题)

    1:首先打开Server Manager(凡是不知道在那里开发均可像Win7一样在运行里面搜索) 2:然后在左边的树形菜单中选择:Feature 点击右边页面中的:Add Features 这时候会出 ...