lucene的模糊匹配
????? 周末啦,利用这点时间对自己这段子的工作任务,以及用到的技术的心得简单总结一下。希望我的微薄之力和见解可以帮助到一些有这方面需求的朋友.
?????
?????? lucene在这里我使用的是.net版本,lucene.net 2.0 , 为什么我先强调一下版本,就因为在与其他项目组合作的时候使用到了同一个库表的数据索引,导致生成的索引文件名称有所不同,在查询的时候,Indexsearch.open(dictionary) 的时候报错了,“未将对象引用设置到对象的实例”,为了避免这样的问题尽量是索引时候和查询的时候一定要使用相同版本的lucene.
??
?????? 在使用了一段lucene之后,越来越感觉与操作数据库相似,为何这么理解呢?我认为存储的时候是一行一行的写入,即一行一个doc,而在查询的时候更是与sql语句相似,所以在使用时间长一点之后发现,便不如自主的用拼写sql语句的方式来构建各种查询的条件; 不过这也是基于现实应用的,如果你的需求有所不一样,或者没有足够的条件,也就是所谓的AND条件,还是不要随便拼的好,老老实实使用OR就可以满足多数人的需求了,前提是你一定要有一个特别强大的词库,支持你每一个应该分开的词得分开才行。
?
??????采用lucene的地方多数为中文搜索,在配合上pangu分词,可以成为是最佳拍档了,pangu分词现在的功能还是可以满足多数人的需求的,在实际用的时候,由于我需要将标题多次分词,来提取我想要的条件,导致我不得不加载多个词库来进行多次分词;而在这里我要索引的数据可不全是中文,而是实现一个比价网的比价搜索,针对商品的处理可要比纯中文麻烦的多,需要查询到同品牌,同型号,同类别的产品,对于这些条件的提取,分别构建一个属于他们自己的标准型词库是必须的,品牌不难,型号很难,类别更是难,在这样的基础下我把类别整理了一下,真是把人累的眼都帽花....最终达到的效果是一个8万产品的商城仅仅有8000关联不到分类,这样的结果已经为我现在的匹配结果起到了固基的作用,最后构建了一份综合的分词词库,使得品牌+分类这些可以判定产品的重要型关键词还是被分出来了。在匹配的时候起到了特别大的作用。 想要匹的准,必须分的准,想要分的准,词库必须准;而这个准也是建立在一个全的基础上的,不但要准还要很全才能达到所有不同形式的命名都被正确的处理分开。
?
??? 在使用pangu分词的时候由于整理词库,从网上下载了一个它自带的一个词库管理工具,不过大家使用的时候要注意啦,批量添加词得时候会丢词,一直没有时间来重写它。
?
??? 有了以上的条件作为基础,现在基于分词的提取还是很不错的,而现在项目中需要实现的1:1精确匹配,不得不让我再次回到sql的思想上去,分词后的词语进行过滤筛选,以至于精简到最后,作为精确条件去搜索。?
?
??? 在这里或许分享的不是很全面,有不理解的朋友可以留言,我们一起进行讨论。
?
??? 有时间也得把知民网搜索改成.net版本,让用户搜索到更多自己想了解的东东。
?
???
?
??? ?
?????
?
????