后我以前的问题(http://stackoverflow.com/questions/8217522/best-way-to-search-for-partial-words-in-large-mysql-dataset),我'我选择了Sphinx作为MySQL数据库上方的搜索引擎。狮身人面像搜索,复合键
我已经做了一些小测试,它看起来不错。不过,我现在正处于一个地步,我需要一些帮助/意见。我有一个表的文章(结构并不重要),表属性(结构并不重要),以及每个文章的每个属性的值(这是它的全部内容)的表。 其中这些值存储表,具有以下结构:
articleID UNSIGNED INT
propertyID UNSIGNED INT
value VARCHAR(255)
主键是条款ArticleID和属性ID的化合物键。
我希望狮身人面像通过value
列进行搜索。但是,要在Sphinx中创建索引,我需要一个唯一的ID。我没有在这里。 同样在搜索时,我希望能够在propertyID列上进行过滤(例如,只能通过将propertyID定义为属性来实现propertyID 2的搜索值)。
在狮身人面像的论坛,我发现我可以创造一个多值属性,并将其设置为查询我的狮身人面像指数:现在不过
SELECT articleID, value, GROUP_CONCAT(propertyID) FROM t1 GROUP BY articleID
条款ArticleID将是独一无二的,我现在很想念值。所以我很确定这不是解决方案,对吧?
还有一些其他选项,如:
- 添加一个额外的列的表,这是唯一
- 创建查询计算的独特价值(如
articleID*100000+propertyID
)
有没有其他的选择我可以使用,你会怎么做?
Thans为你解答的结果。如果我创建了一个计算的独特值,那么让这两个ID回来是可取的。但是这当然不是一个很好的方法...... –
如果你这样做,你需要一个字段2 *(INT)大小的字段来存储数据库中的组合键值,否则无论何时重新索引数据库,都必须重新计算它。想想你计划每天重新索引DB一次,DB表包含100000条记录,所以计算成本会更高。而用户的未来增长将会使其变得更加困难。 –
是的。这不是一个好的选择。我会再等几天,看看其他人是否对我的问题有其他意见,然后再将其标记为答案。 –