Значит, допустим, что у нас есть два поля, по которым осуществляется поиск. Первое - название, второе - тоже название но название категории.
Внимание - вопрос.
Как правильно выставить приоритет полей, чтобы результаты второго поля(название категории) выдавала результат только ежели нету результата по первому полю.
Допустим, что у нас в запросе лимит на 100., но результатов от первого поля лишь 70, вот как набрать недостающие 30, при условие - ежели такие имеются по второму полю?
Запрос типа sql SELECT… WHERE… LIMIT;
Время пошло. (шутка)
П.С.
Я к шуткам добавляю надпись намеренно, потому как очень часто встречаются люди напрочь лишённые чувства юмора.
Боюсь, что только в приложении это можно обработать: сперва поискать по одному полю, не найти там ничего или недостаточно, тогда поискать в другом поле.
Там опять время на запросы, обработку… Нам ведь результат нужен в милисикундах, чтобы обойти конкурентов. Может со временем ведёте такую фишку… типа ‘field rank’
Почему-то кажется, что тема весьма интересная.
Пока же, чтобы не терять во времени на тучу действий можно - как у гугла - что то вроде показать пропущенные результаты… и хрясь доп.результаты в кучу. Хотя это не совсем то что нужно.
@tomat Но как оно будет работать при сортировки ORDER BY id desc или … price desc ? То есть списки будут иметь другую почередность… По моему всё выше упомянутое может работать ежели нет сортировки или как?
Как правильно выставить приоритет полей, чтобы результаты второго поля(название категории) выдавала результат только ежели нету результата по первому полю.
на этот вопрос ответ
SELECT weight() as sort FROM idx ... ORDER BY sort DESC OPTION field_weights=(title=10, body=3)
если вам нужна дополнительная сортировка вы можете изобрести какую-то формулу например с другими ранкерами Manticore Search Manual: Searching > Sorting and ranking (наример fieldmask ранкер) и UDF функцией написаной для вас, под ваши требования
SELECT weight() as sort, my_udf_func ( weight, id, price ) as sort1 FROM idx ... ORDER BY sort1 DESC OPTION ranker=fieldmask;