MySQL: поиск нескольких слов в полнотекстовом поиске - только точные совпадения - PullRequest
2 голосов
/ 30 августа 2010

Я пишу код для автоматической пометки некоторых статей.

У меня есть массив тегов и таблица статей.Я запускаю следующий запрос, чтобы проверить заголовки, совпадающие с тегом:

SELECT headline 
  FROM `news` 
 WHERE MATCH(headline) AGAINST ("+Green +Day" IN BOOLEAN MODE)

Это находит все статьи с точной фразой «Зеленый день» в заголовке - без первого + я получаю статьи, содержащие толькослово «зеленый».

Это не идеально, и некоторые теги приводят к неточным результатам - например, тег с именем Die! Die! Die! (не спрашивать) возвращает каждый заголовок со словом «die».

Есть ли что-то очевидное, что я здесь упускаю?Все, что я хочу, это получить заголовки, которые содержат всю фразу точно так, как она введена.

Ответы [ 4 ]

3 голосов
/ 30 августа 2010

Насколько я вижу в документах , достаточно использовать кавычки. Из примеров на странице документов:

"несколько слов"

Найдите строки, которые содержат точную фразу «некоторые слова» (например, строки, которые содержат «некоторые слова мудрости», но не «некоторые слова шума»). Обратите внимание, что символы "" ", которые включают фразу, являются символами оператора, которые разделяют фразу. Они не являются кавычками, которые заключают в себе строку поиска.

2 голосов
/ 15 ноября 2013

Вы должны поместить дополнительную одинарную кавычку вокруг двойной кавычки, что означает точный запрос слова.+ оператор просто означает AND логика.

SELECT headline 
  FROM `news` 
 WHERE MATCH(headline) AGAINST ('"+Green +Day"' IN BOOLEAN MODE)
1 голос
/ 30 мая 2012

@ Мэтт - причина совпадения «Ужаса» с использованием кода Митча в том, что вы не оставили пробела после первого символа%. Правильный синтаксис точного поиска одного слова будет выглядеть так:

SELECT headline FROM news WHERE headline LIKE '% Green Day %' 

Это обработает ваш запрос на поиск искомых слов, введенных точно таким же образом.

0 голосов
/ 30 августа 2010

Если вы хотите сопоставить всю фразу, вы должны сделать что-то вроде:

SELECT headline FROM news WHERE headline LIKE '%Green Day%'

, который вернет вам результаты с фразой «Зеленый день» в заголовке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...