Есть необходимость текстового поиска в разных источниках (столбцах). Сейчас генерируются такого рода запросы:
SELECT emid as avid_id,
id as viplanner_id
FROM objects
where (hasAll(name, ['кремль'])
WHERE (hasAll(name, ['кремль'])
OR hasAll(full_name, ['кремль'])
OR hasAll(note, ['кремль'])
OR hasAll(maintitle, ['кремль'])
OR hasAll(description, ['кремль'])
OR hasAll(keywords, ['кремль'])
OR hasAll(archive, ['кремль'])
)
AND emid != 0
AND stream_class = 'VIDEO'
ORDER BY emid, id
LIMIT 20
SELECT emid as avid_id,
id as viplanner_id
FROM objects
WHERE ((arrayExists(x -> x LIKE '%кремль%', name))
OR (arrayExists(x -> x LIKE '%кремль%', full_name))
OR (arrayExists(x -> x LIKE '%кремль%', note))
OR (arrayExists(x -> x LIKE '%кремль%', maintitle))
OR (arrayExists(x -> x LIKE '%кремль%', description))
OR (arrayExists(x -> x LIKE '%кремль%', keywords))
OR (arrayExists(x -> x LIKE '%кремль%', archive))
)
AND emid != 0
AND stream_class = 'VIDEO'
ORDER BY emid, id
LIMIT 0, 20
Первый случай более предпочтителен, со стороны компактности кода, т.к в hasAll может приходить более одного элемента. Есть ли какие-то различия в работе через hasAll или через arrayExists+like?
Так первое проверяет что елемент массива равен крмль а второе что содержит крмль
Обсуждают сегодня