solr 对网站域名的搜索技巧应用

      菜鸟级文章,高手请绕道.

      基本事情背景是这样, 在公司的抓取回来的数据中,都有大量的来源不同网站的域名.这时用户可能只对某几个来源网站感兴趣,或者对某几个来源网站不感兴趣之类,以前的版本中,只对网站域名做了非常简单的分词,基本上可以认为是对 www.it.com.cn 之类的网站,通过 "." 把域名拆开,然后索引.这样用户在搜索某几个域名的网站,直接就可以匹配到了.

    但这样形式在最近用户提出的问题中需要处理了. 原来当时我们理解用户的要求有点偏差,其中主要是集中两个问题

 

    1.  比如用户搜索来源于 www.it.com 这个网站, 但搜索出来 www.it.com.cn 这样的网站了. 但用户并不希望它出现.

     2.  另外有一些来源网站有N多个二级域名例如 iteye.com 这一个网站,都以用户名作为二级域名了, 这样用户在希望关注 iteye.com 的文章的时候,自然只输入搜索域名 "iteye.com" 了,但却出现了非常多其他第三网站如: iteye.abc.com ,  iteye.archve.com 之类的非法的网站.

 

     上面说了这么多,其实根本就是出现在分词那里,因为对了域名做了普通的 term 的分词,所以这样子搜索其实根本不能保证哪个关键字出现的前后次序. 最好最理想的办法就是把输入域名,通过从最后匹配上来,

     简单来说就是

                输入   iteye.com  那么匹配中,从最后面开始往前匹配. 这样肯定就能保证到域名的匹配了.

       但,问题就是 ,  lucene 或 solr 似乎都没有这样子的匹配方法,前缀匹配倒有一个 prefixQuery 之类的.

      然后我也尝试用了 正则匹配之类的 , 还有那个 wildCard 也用了一下,但似乎还不能满足这一个需求.

 

      最后,其实可以反过来想.  直接使用了 prefixQuery 就可以了 , 前提条件就是把那个 domain 那个索引类型改了一下,从之前的 onText 改成 string 类型,同时把输入的域名进行反转,这样就可以使用了

     具体如下:

         1.   在索引提交索引的过程中, 比如 本来要索引的是 baidu.com  则转换一下,变成 moc.udiab .

               转换代码如下:

    

     2.  其次,  每次当用户输入的索引,也进行这一个域名反转的处理. 使用前缀搜索处理则可. 可以完美匹配出域名,二级域名,指定搜索某一个域名之类的操作.如果在 solr 中,如果只要 baidu.com 这一个网站的的话,则可以搜索  domain:moc.udiab*  这样子则可 ,这样的小技巧应用非常实在.

 

       结语:  从上一遍文章到现在已经隔了快1年没写文章了,一直都心里打算着要写点技术文章之类的,很希望一直能深深钻研技术类, 当然是往更底层,更核心的方向去向,比如大数据的hadoop,hbase 中,在现在工作上的应用使用hadoop , hbase 之类,其实越用越感觉自己只是 hadoop 的一个使用者而已,就算优化得非常好,也仅仅是一个高级的使用者而已,因为里面的核心比如 存储形式,并发运算等核心都是别人的, 自己用得再好,也只是一个使用者. 要打破这些,唯有自己学习里面的核心比如算法还有 hdfs 之类的存储形式,能有自己的实现方式才是根本.

      

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值