这是我对 sphinxQL 的查询:
SELECT option_id FROM items WHERE cat IN (10,11) GROUP BY option_id LIMIT 100000 OPTION max_matches=100000
cat 是 sql_attr_multi 字段,此查询不会返回给我正确的结果。有人知道如何通过这个 sphinx 属性按字段搜索吗?
这是我对 sphinxQL 的查询:
SELECT option_id FROM items WHERE cat IN (10,11) GROUP BY option_id LIMIT 100000 OPTION max_matches=100000
cat 是 sql_attr_multi 字段,此查询不会返回给我正确的结果。有人知道如何通过这个 sphinx 属性按字段搜索吗?
该查询查找cat
属性包含 10或11 的项目,这是您想要做的吗?
如果不是,将有助于了解您要查询的内容!
我有类似的问题。
当我将数组传递给 MVA 属性的 IN 条件时,我没有结果,但是索引中有几个。当我调试条件(在您的情况下为属性数组(10、11))时,我看到数组值是字符串整数。
array(
0 => "10",
1 => "11"
)
对于条件中的每个单个值,使用 quoteArr() 函数 https://github.com/FoolCode/SphinxQL-Query-Builder/blob/master/src/SphinxQL.php#L518与https://github.com 一致的转义值/FoolCode/SphinxQL-Query-Builder/blob/master/src/Drivers/ConnectionBase.php#L95
引用函数使用 is_int() PHP 内部函数:
$a = "1";
var_dump(is_int($a)); // return bool(false)
这意味着,相反
cat IN (10, 11)
你有
cat IN ("10", "11")
但是 sphinx 不能通过不是整数(字符串)值来过滤 MVA 属性,而不是您使用的 IN 或 OR WHERE 表示法。
[1064] index document : unsupported filter type 'string' on MVA column [ SELECT * FROM `document` WHERE MATCH('(some query)') AND `_category` = '5' LIMIT 0, 10]
您应该使用严格的值类型:
foreach ($category as &$item) {
$item = (int)$item;
} unset($item);
我不确定这是不是你的事件。不幸的是,在这种情况下,没有足够的数据可以肯定地说。