Задать вопрос
Big_person
@Big_person

Как выполнить поиск используя Sphinx?

Имеется база автомобилей. Задача по произвольной строке найти из таблицы максимально схожую модификацию автомобиля.
Данные для индекса в sphinx.conf получаю следующим запросом
SELECT car_modification.id_car_modification as id, 
			car_modification.name as modification, 
			car_serie.name as serie, 
			car_generation.name as generation, 
			car_generation.year_begin as year_begin, 
			car_generation.year_end as year_end, 
			car_model.name as model, 
			car_model.name_rus as model_rus, 
			car_mark.name as mark, 
			car_mark.name_rus as mark_rus 
			FROM car_modification 
			LEFT JOIN car_serie ON car_modification.id_car_serie=car_serie.id_car_serie 
			LEFT JOIN car_generation ON car_serie.id_car_generation=car_generation.id_car_generation 
			LEFT JOIN car_model ON car_generation.id_car_model=car_model.id_car_model 
			LEFT JOIN car_mark ON car_model.id_car_mark=car_mark.id_car_mark

Ищем таким образом
$result = $cl->Query("Хундай санта фе 2008"); // поисковый запрос котрый выдает не верные результаты


1. Как сделать чтоб sphinx находил результаты не зависимо от того на каком языке искомый запрос?
2. Каким образом можно производить поиск до максимального уровня вложенности марка-модель-поколение-серия-модификация.
То есть запрос: "инфинити ex 37 2011" вернет id модификации:
Марка - infiniti
Модель - EX-Series
Поколение - 1 поколение [2007 - 2013]
Серия - Кроссовер 5-дв.
Модификация - EX37 AT AWD (330 л. с.)

А запрос "инфинити ex 2011", возвращал бы id поколения:
Марка - infiniti
Модель - EX-Series
Поколение - 1 поколение [2007 - 2013]

3. Как заставить учитывать год выпуска автомобиля, который указывается в запросе и указан в серии (диапазон между year_begin, year_end)?

1 проблему можно решить используя функцию транскрипции на php перед выполнением поискового запрос. Но помойму это костыль.

3 пункт можно решить уже после того, как мы получили массив результатов от sphinx, делаю повторную выборку и учитывая года выпуска, но мне кажется это опять же костыль и данную функцию должен выполнять поисковый движек.

Марку модель и год я могу подставлять в поисковый запрос отдельно, используя регулярные выражения для выборки.
  • Вопрос задан
  • 337 просмотров
Подписаться 2 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
opium
@opium
Просто люблю качественно работать
1) никаким , переводите на стороне пхп
2) эту логику тоже в пхп придется делать
3) вычленить год в пхп и сделлать отдельный фильтр по нему
всфинксе нет магии это просто поисковый движок по тексту
Ответ написан
@ksnk
В сфинксе магии, может и нет, а вот словоформы - есть.
искать по словам `shphinx wordforms`
Словарик, правда, нужно будет составить вручную
кровать > bed
кресло > chair
красный > red
сумка > Bag
...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы