Sphinx 搜索查询 - varchar 列中数字的条件
Sphinx search query - condition for numbers in varchar column
我有项目和列表,其中存在类别:
id | name | categories(varchar)
1 | bike red | 2,5,18
2 | bike black | 4,7,13
对于 Sphinx,我需要搜索例如:bike 并且仅来自类别 5
在列类别中搜索有什么好的方法吗?
在 MySql 我可以写:WHERE name LIKE '%bike%' AND categories LIKE '%5%'
但是我的Sphinx 索引很大,搜索可能无效。有什么方法可以像创建整数 ENUM 列表一样吗?什么是好的解决方案?
谢谢
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)
- 效果相同)
我有项目和列表,其中存在类别:
id | name | categories(varchar)
1 | bike red | 2,5,18
2 | bike black | 4,7,13
对于 Sphinx,我需要搜索例如:bike 并且仅来自类别 5
在列类别中搜索有什么好的方法吗?
在 MySql 我可以写:WHERE name LIKE '%bike%' AND categories LIKE '%5%'
但是我的Sphinx 索引很大,搜索可能无效。有什么方法可以像创建整数 ENUM 列表一样吗?什么是好的解决方案?
谢谢
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)
- 效果相同)