@d1mvla5off

Как искать несколько совпадений с группировкой по какому-то полю?

Аналог на sql:
select
    distinct
    group_id,
    text
from index_1 as i1
where text like '%search_text_1%'
    and exists (select 1 from index_1 as i2 where i2.group_id = i1.group_id and i2.text like
    '%search_text_2%')


Попытка на Сфинксе:
select
    group_id,
    text
from index_1
where match('@text %search_text_1%')
...?
group by group_id


Подскажите пожалуйста
  • Вопрос задан
  • 123 просмотра
Пригласить эксперта
Ответы на вопрос 1
tumbler
@tumbler
бекенд-разработчик на python
Запрос выглядит как "найти группу, для которой в одном документе есть один текст, а в другом (или том же) - другой". Сдается мне, что надо делать индекс, в котором документ - это группа, и искать просто оба совпадения сразу. Почему так:
  • Если искать по "И", то найдутся только документы группы, в которых есть и тот и другой текст (т.е. ситуация "в другом документе второй текст" не находится)
  • Если искать по "ИЛИ" а потом отфильтровывать результаты по HAVING COUNT(*) > 1, то попадают лишние результаты (2 документа с первым текстом)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы