Работа с приоритетом

SELECT id, title, WEIGHT() AS w
    	FROM indexnews
   	WHERE MATCH('@title \"call of\"/0.3')
    	ORDER BY w DESC, time DESC
    	LIMIT 0, 10
    	OPTION ranker=proximity_bm25

Как сделать, чтобы в выборку попадали все записи что в таблице, а приоритет был у тех, у которых есть совпадения по MATCH, остальные с низу.

Данный запрос работает так, что выдает только те строчки в которых нашел совпадения.
Их всего 3, на выходе 3, вместо 10.

Никак не удается такое выполнить…

Добавьте в каждый документ спец. слово, в полнотекстовый запрос добавьте | <это спец. слово>. Таким образом в крайнем случае будет совпадение по этому слову.

1 Like
SELECT id, title, WEIGHT() AS w
    	FROM indexnews
   	WHERE MATCH('@title \"call of\"/0.3 | @title_prev \" \"/0.0') 
    	ORDER BY w DESC, time DESC
    	LIMIT 0, 10
    	OPTION ranker=proximity_bm25

SELECT id, title, WEIGHT() AS w
    	FROM indexnews
   	WHERE MATCH('@title \"call of\"/0.3 | < >') 
    	ORDER BY w DESC, time DESC
    	LIMIT 0, 10
    	OPTION ranker=proximity_bm25

Не понимаю, у меня не работает. Как верно прописать данный
WHERE MATCH('@title \"call of\"/0.3 | < >')

Все возможные варианты перепробовал…

Под спец. словом я имел в виду любое слово, например dskjhdkjshdjksh4k4h23kjh342j
Т.к. оно будет в каждом документе, то добавление | dskjhdkjshdjksh4k4h23kjh342j в поиск гарантирует, что каждый документ найдётся.

1 Like

Ура, работает.

1 Like