早几天写的文章那里,对域名的搜索那里 http://kernaling-wong.iteye.com/blog/2212191 ,这几天经过实践,有了新的认识所以想补充一下.
简单说说上个文章表达的,其实就是对域名进行搜索,比如输入it.com ,则不希望出现类似 it.com.cn 这样的域名, 只会搜索出 xxx.it.com 这样的域名.
我上个文章说 把域名进行反转,比如索引 www.it.com 则索引成 moc.ti.www (索引按 solr 说法,不是 onText 而是 string 类型, 按 lucene 说法则是 stringField 而不是 textField 了.) ,然后搜索也反转成这样,最后通过前缀匹配. 则可以满足其要求.
但最近这几天实践,发现这样有一个严重的问题.比如现在有 www.hao123.com 这一个域名, 但我搜索 123.com 其实一样能搜索出来的. 而自己细想了一下,这个的确也是能搜索出来.因为只是匹配而已,并没有识别出是否整体地被匹配了.
所以其实我上个文章写的那种方式就是出现这一个问题了.我后来试想了一个办法.既然可以前缀匹配了,那是不是可以把这一个域名的字段变成 onText 然后按 term 这样子位置整体前缀匹配呢?
1 . www.hao123.com =反转域名后=> moc.321oah.www 然后按 term分词后变成 moc , 321oah ,
2 . 然后我想通过前缀匹配 + 搜索短语,类似搜索语法是 : "moc.321oah.www"*
3. 经过实验和测试,这种方式不行,看来前缀匹配只能匹配每一个 term 但不按类似短语这样子匹配起来.
这几天,一直都忙着这一个事情,又看源码,又找相关资料,这种方式,最后还是不行的.
最后,我的上司建议我通过一种比较取巧的办法,因为现在数据主要还是国内的数据,域名基本上就是 .com.cn , org.cn , net.cn , com.hk 之类几种域名,所以我们在分词那里做一个改动,就是把这类域名的,就作为一个词了 ,即 www.it.com.cn 分词后变成 www , it , com.cn 就这三个,这样就能解决上面的问题了.,而且改动也不大. 在索引的时候,对新的数据,另外开了新一个索引字段,然后 使用了新的分词,旧的字段依然存在,也使用以前 的分词方式,这样就能保证了旧的数据也能搜索出来,新的数据也可以搜索出来了,兼容了新旧数据.
经过前几天, 觉得自己还要非常多地方要学习. 加油吧.