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 フィールドです。このクエリは正しい結果を返しません。このスフィンクス属性でフィールドを検索する方法を知っている人はいますか?

4

2 に答える 2

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

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);

それがあなたの事件であるかどうかはわかりません。残念ながら、この場合、それを確実に言うのに十分なデータはありません.

于 2016-08-24T08:54:57.283 に答える