Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Поиск по тегам. Найти все материалы в которых встречается хотя бы один тег

00 голосов
5
Делаем:
$arFilter = array(
"SITE_ID" => SITE_ID,
"TAGS" => 'тег1, тег2, тег3',
);
$obSearch = new CSearch();
$obSearch->Search($arFilter);

и он находит все элементы которые содержат все переданные в параметре теге, т.е. если элемент содержит теги "тег2,тег3" то он не найдётся.
Вопрос, как его заставить находить все материалы в которых встречается хотя бы один из перечисленных тегов?
спросил 24 Фев, 13 от FORTUNA (160 баллов)

5 Ответы

00 голосов
Интересный вопрос. А "LOGIC"=>"OR" там не сработает?
ответил 24 Фев, 13 от BRENN (1,080 баллов)
00 голосов
может быть,
Код
"TAGS" => array('тег1', 'тег2', 'тег3'),
?
ответил 13 Март, 13 от sickmind (4,660 баллов)
00 голосов
$arFilter = array(
"LOGIC" => "OR",
array(
"TAGS" => 'тег1',
"SITE_ID" => 's1',
"MODULE_ID" => "iblock",
),
array(
"TAGS" => 'тег2',
"SITE_ID" => 's1',
"MODULE_ID" => "iblock",
)
);

Ничего не находит

$arFilter = array(
"SITE_ID" => 's1',
"TAGS" => array('тег2','тег1'),
'!ITEM_ID'=>$arResult['ID']
);

тоже ничего не находит =(
ответил 11 Апр, 13 от FORTUNA (160 баллов)
00 голосов
А если так попробовать

$arFilter = array(
"LOGIC" => "OR",
array(
"TAGS" => '%тег1%',
"SITE_ID" => 's1',
"MODULE_ID" => "iblock",
),
array(
"TAGS" => '%тег2%',
"SITE_ID" => 's1',
"MODULE_ID" => "iblock",
)
);

В структуре таблицы SQL b_iblock_element поле TAGS имеет тип varchar, соответственно в Select запросах можно использовать только % и like.
ответил 05 Авг, 13 от FaiRy (140 баллов)
00 голосов
Если судить по строке
Код
$this->Query = new CSearchQuery("and", "yes", 0, $arParams["SITE_ID"]);

в ядре, то можно предположить что логика OR вообще сейчас недоступна.
Возникает вопрос: а будет ли?
Вопрос возник в разрезе реализации модуля "похожее по тегам".
ответил 06 Ноя, 13 от SilentSin (100 баллов)