Помогите пожалуйста.
Нужно делать полнотекстовый поиск по json полю
sql_attr_json = client_users
дело в том что json поле массив.
нашел выход через ANY
ANY(client_user.login = "test" FOR client_user IN client_users)
вот код PHP
$client = new \Manticoresearch\Client($config);
$search = new \Manticoresearch\Search($client);
$search->setIndex('clients');
$search->expression('cond1', 'ANY(client_user.login = "'.$query.'" FOR client_user IN client_users)');
$bool = new \Manticoresearch\Query\BoolQuery();
$bool->should(new \Manticoresearch\Query\Equals('cond1', 1));
$bool->should(new \Manticoresearch\Query\QueryString($query.'*'));
$search->search($bool);
$results = $search->get();
print '<pre>'.print_r($search->getBody(), true).'</pre>';
генерируется следующий массив
Array
(
[index] => clients
[script_fields] => Array
(
[cond1] => Array
(
[script] => Array
(
[inline] => ANY(client_user.login = "test" FOR client_user IN client_users)
)
)
)
[query] => Array
(
[bool] => Array
(
[should] => Array
(
[0] => Array
(
[equals] => Array
(
[cond1] => 1
)
)
[1] => Array
(
[query_string] => test*
)
)
)
)
)
и результат пустой. Однако, если же убрать одно из условий то все работает хорошо.
Если перевести на язык sql - то это примерно так:
select login, name, ANY(client_user.login = 'test' FOR client_user IN client_users) as cond1 from clients where cond1 = 1 OR match('test*');
выдается ошибка
ERROR 1064 (42000): sphinxql: syntax error, unexpected ‘(’ near ‘(‘test*’)’
Подскажите как быть?
Как либо сделать полнотекстовый поиск по json массиву, либо использовать OR/SHOULD