锁定老帖子 主题:分类搜索,该怎么做
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-10-15
最后修改:2012-10-15
大家好
A A1 A11 A111 A112 A12 A2 A3 B C
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-10-15
目前我使用的方案是:
使用lucene 做N次索引。 具体如下: 如果一个商品是A1下,那么就向A,A1这2个索引里面添加,如果是A111那就必须添加A,A1,A11,A111四个索引了,感觉虽然查询起来是方便了但是索引有点多,不是太完美。 你的方案完全可以啊。。 也可以这样的方案。。你就只把A/A1/A11/A111 这样建一个索引。。然后就按前缀搜索就行了。。 |
|
返回顶楼 | |
发表时间:2012-10-15
如果你的数据不多,且不做分类的移动, 且分类最大深度是固定的,比如就分4级,那把每一级做为数据库一个字段,就最简单了。
categoryid1 categoryid2 categoryid3 categoryid4 这样每一条记录都包含这4个字段。 当然现实中可能需求比较复杂,没办法这么简单的搞定。 你的方案能work的不错就行了,何必纠结呢 |
|
返回顶楼 | |
发表时间:2012-10-15
就使用categoryid,categoryCode,categoryname,categoryparentCode这样就足够了。
对于categoryCode的设计,可以先做分析控制。 比如你的举例为4级,每一级别的量级应该也是可控的吧。 那么可以设计为AAABBBCCCDDD, 对于最大类标示code为AAA,第二级别为AAABBB,第三级别为AAABBBCCC,第四级别为AAABBBCCCDDD。 关于父节点就存储上一级的code就可以了。 这样直接做某一大类的查询,like就可以直接搞定了。 |
|
返回顶楼 | |
发表时间:2012-10-15
最后修改:2012-10-15
增加一个path字段。 把一个分类的完整路径拼成这个字段。
比如 一个分类的id是 1.他的子分类是2 他的孙子的分类是3 这样孙子id的path就是 /1/2/3 查询的时候 select * from 表 where id in ( select id from 表 where path like '/1/%' ) 就能查到1下面的所以子孙分类。 而且根据path字段 split后 就能很方便的获取当前分类的层级路径。 如果你是在搜索引擎里。。id肯定不能分词。 你建的时候 用 id 空格 id 空格 id表示path。 |
|
返回顶楼 | |
发表时间:2012-10-15
如果系统的业务简单,分类的数据量不是很大
完全可以用我这种方法,通过id入手。 001 001001 001001001 001001002 001002 001003 001004 所以建表的时候连父节点这个字段都可以省了。直接通过id就可以判断他的父节点还有深度,查询更简单,一个like搞定 缺点就是这种设计分类层级的数量是有限定的,001开始表示该节点下数量最多是099,如果超过了099那么业务就会发生错误 当然可以根据你的业务去定义他的初始数值,可以定义为0001或者00001,这样容纳的数据就会更多。 |
|
返回顶楼 | |
发表时间:2012-10-15
java_project 写道 就使用categoryid,categoryCode,categoryname,categoryparentCode这样就足够了。
对于categoryCode的设计,可以先做分析控制。 比如你的举例为4级,每一级别的量级应该也是可控的吧。 那么可以设计为AAABBBCCCDDD, 对于最大类标示code为AAA,第二级别为AAABBB,第三级别为AAABBBCCC,第四级别为AAABBBCCCDDD。 关于父节点就存储上一级的code就可以了。 这样直接做某一大类的查询,like就可以直接搞定了。 这个方案想来想去不太好,最主要的是分类是回更改的,一旦更改,AAABBBCCC这样子的怎么好去跟新呢。like 去匹配的话,性能较差不说,可能会出现误差。 |
|
返回顶楼 | |
发表时间:2012-10-15
leonayx123 写道 增加一个path字段。 把一个分类的完整路径拼成这个字段。
比如 一个分类的id是 1.他的子分类是2 他的孙子的分类是3 这样孙子id的path就是 /1/2/3 查询的时候 select * from 表 where id in ( select id from 表 where path like '/1/%' ) 就能查到1下面的所以子孙分类。 而且根据path字段 split后 就能很方便的获取当前分类的层级路径。 如果你是在搜索引擎里。。id肯定不能分词。 你建的时候 用 id 空格 id 空格 id表示path。 这个很好啊,谢谢啦,但是类别一旦更改要如何改变呢,比如,以前的一个类要细分成3个,有没有什么方便的方案,谢谢,改完就得重建索引? |
|
返回顶楼 | |
发表时间:2012-10-15
要考虑会动态删除中间一个节点,
|
|
返回顶楼 | |
发表时间:2012-10-16
我们之前是根据数据库建表进行分类查询的
总分类表 || 分类表 在分类表建立索引 |
|
返回顶楼 | |