什么数据库,什么语言,都无所谓,关键是正确的思路。
我很想学习一下http://www.lightinthebox.com/index.php?main_page=advanced_search_result&inc_subcat=1&search_in_description=0&light_select=0&keyword=silver-black-gray
我的基本推断应该是,一张词库表,一张词库ID和产品ID的关联表
首先说一下我总结的一些规律:
1. 逗号,句号,下划线等字符都换成空格(因为'card-phone cell head'和'card-phone,,,cell head'找到的结果都一样)
2. 按照空格把字符串分隔成各个单词,再对每一个词去搜索,把搜索结果union起来(因为'card phone cell head'和'cell head card phone',顺序不一样,但结果是一样的)
但是疑问一:silver black gray cell 得到的结果和 silver black gray cell phone得到的结果是一样的,但是单纯的phone搜索,有40多页的结果,也就是,不能完全把每一个词分开,再把搜索结果union起来。
疑问二:silver black gray cell得到的第一个搜索结果是产品W08 Quad Band Watch Style Cell Phone Black - silver - gray SZR106 ,而且它包含了前3个单词,也就是它更符合搜索条件,这个怎么弄呢?难道搜索词库不仅仅是每一个词的库,还包括所有词汇的22组合,或者33组合,这样,数据库的量级,mysql还能承受么?就算我把各个组合的词汇都放进词库表了,那么怎么用php或者C#还要分析出某一个长词汇的先后顺序,比如silver black gray cell,我要分析出来,先查询silver black gray(因为该词汇有产品关联),再按照black gray或者gray cell来查询。。。。oh,my god。
疑问三:这个东东应该不会用到Like查询了吧,那么所有产品的详细名字都要记录到词汇表里面么?
比如这个产品
W08 Quad Band Watch Style Cell Phone Black - silver - gray SZR106找到唯一的它
W08 Quad Band Watch Style Cell Phone Black - silver - gray还是只有它
W08 Quad Band Watch Style Cell Phone能找到名字都是这个开头的3个产品了
这个到底是不是like查询啊,oh,my god.
疑问四:刚刚这个搜索W08 Quad Band Watch Style Cell Phone的到如下的:
Related Searches: Quad Band, Quad Band Watch, Quad Band Cell, Quad Watch Phone, Quad Cell Phones, Quad Band Phone, Quad Band Watch Phone, Quad Band Cell Phones, Quad Band Cell Phone
这个应该不完全是程序上的字符串分析组合,还包括了,每分析出一个,就要到数据库判断有没有相应记录,oh,my god,有那么复杂么?查询速度还那么快?
请大家和我一起来研究啊,或者有经验的前辈来指点一下我。。。
------解决方案--------------------------------------------------------
------解决方案--------------------------------------------------------
有位仁兄专门研究中文分词搜索
你可以去看看,请教一下
------解决方案--------------------------------------------------------
分词算法可以参考一下计算语言学方面的资料
------解决方案--------------------------------------------------------
分词算法可以参考一下计算语言学方面的资料