Принудительно использовать «подразумеваемый И» вместо «подразумеваемый ИЛИ» в логическом совпадении mysql?

0

В mysql boolean match, если нет операторов, OR подразумевается. Если вы хотите И, вам нужно добавить + к каждому ключевому слову.

Таким образом, запрос "word1 word2" равен "word1 OR word2", "+ word1 + word2" равен "word1 AND word2"

Я не хочу, чтобы пользователям приходилось вводить + перед каждым ключевым словом, каковы мои параметры?

Рекомендуемый вариант 1: Есть ли что-то в my.conf, я могу изменить установку значений по умолчанию (я ничего не нашел)

Предлагаемый вариант 2: проанализировать запрос и вручную добавить + к каждому слову. Любой простой код для этого вы можете поделиться?

Проблема с этим заключается в том, что пользователь добавляет "кавычки" или операторы (+ - * < > ) и т.д. он разбивает мой синтаксический код.

Теги:

3 ответа

3
Лучший ответ

Я пошел со вторыми предложениями на моем сайте.

Простой один вкладыш для добавления + перед каждым словом, если вы имеете дело только со словами (не с цитируемыми строками)

$q = implode(' ', array_map(create_function('$a', 'return "+".$a;'), preg_split('`\\s+`', $q))))

или даже более простое регулярное выражение, сделав то же самое:

echo preg_replace('`(\\W|^)\\w`', '\\1+\\2', $q);

если у вас есть не только отдельные слова, но и фразы с фразами для поиска, это должно добавить + перед каждым одиночным некотируемым словом и каждой указанной строкой

echo preg_replace('`(\\s|^)(\\w|"[^"]+")`', '\\1+\\2', $q);
  • 0
    +1 за вызов одного лайнера!
  • 0
    спасибо, но это было первое, что пришло мне в голову и немного излишне, вторая форма с одним вызовом preg_replace намного лучше
Показать ещё 3 комментария
0

Не уверен, что вы имеете в виду, но вот пример того, как вы можете добавить + перед каждым словом.

$s = "a string with several words in it";
$words = preg_split('/\s+/',$s,null,PREG_SPLIT_NO_EMPTY);
if (count($words)) {
    $str = '+' . implode(' +',$words);
}
0

Невозможно изменить поведение полнотекстового соответствия в логическом режиме без каких-либо операторов, кроме редактирования источника. Вам придется использовать вариант 2 (как показывают другие) в той или иной форме. Просто будьте осторожны, как вы это делаете, если выражение поиска приходит от пользователя.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню