Pull to refresh

Comments 8

В теме запчастей задача поинтереснее — обрабатывать запросы вида «колодки кашкай» (если в наименованиии товара нет указания применяемости). Ее тоже можно решить текдоком и sphinx.
И тут прихожу я, с вопросом «колодки веста». Текдок говорит «ой», хотя реально — это колодки логана и прочих ренобазных машин. Всё немножечко сложнее, как показывает практика.
Кто же спорит задача комплексная: каталоги, применяемость, кроссы, наименования, алиасы
+Если ничего не нашлось, можно поискать еще с учетом опечаток (при помощи расстояния Левенштейна).
> Но, к сожалению, отбор данных через WHERE id IN() эту сортировку нарушит. Придется формировать свой запрос для каждого id.

для сохранения порядка записей в MySQL есть функция field().
Использование:
ORDER BY FIELD(id,3,2,1,4)
записи будут отсортированы в порядке указанном в функции

Тут от mysql всё же только протокол. Ну и возможность подключиться консольным клиентом, чтоб быстро "пощупать", как там дела.
Всё прочее до определённого момента пытается поддерживаться совместимым, но это всё же SphinxQL, НЕ MySQL. И если во втором есть разные FIELD — это в общем случае бесполезная информация (надо смотреть доку сфинкса, есть ли ТАМ эта функция)

процитирую автора статьи еще раз
«Выполнив запрос, мы получим отсортированный массив id. Но, к сожалению, отбор данных через WHERE id IN() эту сортировку нарушит. Придется формировать свой запрос для каждого id.»

Пояснение:
— выполнив запрос к сфинксу получили id документов, отсортированные по релевантности
— автор предлагает для сохранения релевантности получать документы из БД (не из сфинкса) отдельным запросом для каждого id
— на деле можно получить все документы одним запросом сохранив релевантность запросом вида «select… from… where id in (?) order by field(id,?)», на место? подставляется перечисление id документов

повторю: речь не про запросы к сфинксу, а про запросы к оригинальной БД
Sign up to leave a comment.

Articles