Solr索引

C#读取RSS源,并利用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版本的爬虫和搜索,但是只是在计划中,因为涉及到的问题太多了...

 

 
随笔分类 - 系统设计
系统设计
asp.net webform 打造私人后台管理系统(附源码)
摘要: 系统简介 不少人让我做公司的网站,要求不多,但是需要有一个后台系统,所以就有了开发的动力。也想做个系统自己学习一下,反正平时也不知道干啥。 本系统采用的是asp.net webform+ado.net,也许现在用的很少了,但是的确是简单粗暴,还是很方便的。这个后台系统是我一个人制作,从布局,写类库... 阅读全文
posted @  2014-08-13 20:34 轻狂.书生 阅读(2112) |  评论 (6)  编辑
 
系统权限的设计之简单设计
摘要: 工作时间也不长,但是总想写一些自己的收获。公司利用的技术也比较单纯,asp.net,js也不怎么需要用,唯一写的多的就是sql语句。好了,废话不多说了,开始谈谈我在做项目中一些对系统权限的收获,不过很多都是项目中看到的,我就想自己重新做一遍。也许会有很多的问题和考虑不全的地方,但是我还是要写出来,当做自己的一种学习罢了。设计思路 (1)用户表 权限是根据登陆者不同而不同的,用户表就比较简单了,简单的表设计如下 [user_no] [nvarchar](20) NOT NULL, //用户ID,主键 [user_name] [nvarchar](20) NULL, [user_... 阅读全文
posted @  2014-01-23 20:33 轻狂.书生 阅读(2494) |  评论 (16)  编辑
分类:  信息采集

你可能感兴趣的:(Solr)