@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


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

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

Войти через центр авторизации
Похожие вопросы
Studio Mango Краснодар
от 80 000 до 150 000 руб.
БюроБюро Калининград
от 60 000 до 120 000 руб.