我有项目和列表,其中包含哪些类别:
id | name | categories(varchar)
1 | bike red | 2,5,18
2 | bike black | 4,7,13
使用Sphinx我需要搜索例如:自行车并且只能从类别 5
如何在列类别中进行搜索?
在MySql中我可以写:WHERE name LIKE'%bike%' AND类别LIKE'%5%'
但我的狮身人面像指数很大,搜索可能没有效果。有没有像创建整数ENUM列表或?什么可能是好的解决方案?
由于
答案 0 :(得分:0)
Sphinx具有多值属性http://sphinxsearch.com/docs/current.html#mva。非常适合这个!
它有点像MySQL中的数字set
! (您有多个类别,因此set
,而不是enum
)
它甚至会在索引编制过程中自动解析逗号分隔的数字字符串列表。
sql_query = SELECT id,name,categories FROM item
sql_attr_multi = uint categories from field;
然后是sphinxQL查询...
SELECT * FROM item WHERE MATCH('bike') AND categories=5
(如果熟悉MySQL,这可能会让人感到困惑.MVA属性上的相等过滤器,只是意味着等于其中一个值。如果想要写categories IN (5)
- 同样的效果)