PHP 7.3 / MySQL v5.6 Многозапрос MyISAM использует BOOLEAN MODE:
У нас есть множество музыкальных инструментов в базе данных. Мы хотели бы вернуть список всех гитар и расставить приоритеты для красных или белых гитар в верхней части результата.
Основываясь на определении оператора тильды, мы подумали, что это может быть правильный подход. К сожалению, с запросом ...
~guitar red white
... результаты включают все инструменты, а не только гитары. Похоже, что «шумовые слова» (в определении) означают, что слово помечено как не относящееся к поисковому запросу. Результат аналогичен отправке red white
. Не уверен в ценности этого.
Мы попробовали некоторые другие идеи ...
~(+guitar) red white // also throws out "guitar."
+(~guitar) red white // matches nothing, I guess because we're matching a noise word.
+guitar >(red white) // matches all guitars and doesn't do anything with red or white.
+guitar (>red >white) // same as above.
+guitar +(red white) // matches only guitars that are red or white
Ни одно из вышеперечисленного не дает нам всех гитар, отдавая приоритет красным и белым. Мы не знаем, что клиенты будут вводить при поиске, поэтому красный и белый - это лишь примеры атрибутов, которые должны иметь более высокий приоритет. Я буду жестко программировать специальный список, чтобы придать этим атрибутам дополнительный акцент в коде.
Конечно, есть простое решение?
Кстати, мы используем ORDER BY id DES C поэтому последние идентификаторы идут первыми, но мы хотим, чтобы поисковые запросы имели приоритет. В идеале результаты должны показывать новейшие красные гитары, новейшие белые гитары и, наконец, остальные гитары от самых последних до самых ранних.