これは、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 フィールドです。このクエリは正しい結果を返しません。このスフィンクス属性でフィールドを検索する方法を知っている人はいますか?
これは、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 フィールドです。このクエリは正しい結果を返しません。このスフィンクス属性でフィールドを検索する方法を知っている人はいますか?
同様の問題がありました。
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
quote 関数は is_int() PHP 内部関数を使用します。
$a = "1";
var_dump(is_int($a)); // return bool(false)
つまり、代わりに
cat IN (10, 11)
あなたが持っている
cat IN ("10", "11")
ただし、sphinx は、使用する IN または OR WHERE 表記法を使用しない整数 (文字列) 値ではなく、MVA 属性をフィルター処理できません。
[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);
それがあなたの事件であるかどうかはわかりません。残念ながら、この場合、それを確実に言うのに十分なデータはありません.