0

这是我对 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 属性按字段搜索吗?

4

2 回答 2

0

该查询查找cat属性包含 1011 的项目,这是您想要做的吗?

如果不是,将有助于了解您查询的内容!

于 2013-10-23T16:39:51.583 回答
0

我有类似的问题。

当我将数组传递给 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);

我不确定这是不是你的事件。不幸的是,在这种情况下,没有足够的数据可以肯定地说。

于 2016-08-24T08:54:57.283 回答