Comments 8
В теме запчастей задача поинтереснее — обрабатывать запросы вида «колодки кашкай» (если в наименованиии товара нет указания применяемости). Ее тоже можно решить текдоком и sphinx.
0
+Если ничего не нашлось, можно поискать еще с учетом опечаток (при помощи расстояния Левенштейна).
0
В сфинксе уже есть выражения call qsuggest/suggest для поиска вариантов исправления опечаток
www.sphinxsearch.com/docs/devel.html#sphinxql-call-qsuggest
www.sphinxsearch.com/docs/devel.html#sphinxql-call-qsuggest
0
> Но, к сожалению, отбор данных через WHERE id IN() эту сортировку нарушит. Придется формировать свой запрос для каждого id.
для сохранения порядка записей в MySQL есть функция field().
Использование:
ORDER BY FIELD(id,3,2,1,4)
записи будут отсортированы в порядке указанном в функции
для сохранения порядка записей в MySQL есть функция field().
Использование:
ORDER BY FIELD(id,3,2,1,4)
записи будут отсортированы в порядке указанном в функции
+1
Тут от mysql всё же только протокол. Ну и возможность подключиться консольным клиентом, чтоб быстро "пощупать", как там дела.
Всё прочее до определённого момента пытается поддерживаться совместимым, но это всё же SphinxQL, НЕ MySQL. И если во втором есть разные FIELD — это в общем случае бесполезная информация (надо смотреть доку сфинкса, есть ли ТАМ эта функция)
0
процитирую автора статьи еще раз
«Выполнив запрос, мы получим отсортированный массив id. Но, к сожалению, отбор данных через WHERE id IN() эту сортировку нарушит. Придется формировать свой запрос для каждого id.»
Пояснение:
— выполнив запрос к сфинксу получили id документов, отсортированные по релевантности
— автор предлагает для сохранения релевантности получать документы из БД (не из сфинкса) отдельным запросом для каждого id
— на деле можно получить все документы одним запросом сохранив релевантность запросом вида «select… from… where id in (?) order by field(id,?)», на место? подставляется перечисление id документов
повторю: речь не про запросы к сфинксу, а про запросы к оригинальной БД
«Выполнив запрос, мы получим отсортированный массив id. Но, к сожалению, отбор данных через WHERE id IN() эту сортировку нарушит. Придется формировать свой запрос для каждого id.»
Пояснение:
— выполнив запрос к сфинксу получили id документов, отсортированные по релевантности
— автор предлагает для сохранения релевантности получать документы из БД (не из сфинкса) отдельным запросом для каждого id
— на деле можно получить все документы одним запросом сохранив релевантность запросом вида «select… from… where id in (?) order by field(id,?)», на место? подставляется перечисление id документов
повторю: речь не про запросы к сфинксу, а про запросы к оригинальной БД
0
Sign up to leave a comment.
Настройка поиска Sphinx для интернет-магазина