Полнотекстовый поиск с частично заключенной в кавычки строкой (mysql) - PullRequest
0 голосов
/ 10 ноября 2011

Я ищу довольно большую базу данных статей, используя полнотекстовый поиск в MySQL, и пытаюсь понять, как все это работает со строками в кавычках.

В основном, когда я ищу «арест Джона Смита», я хочу, чтобы он возвращал статьи, в которых есть «Джон Смит» и «арест», но не истории, в которых есть только «Джон» и «арест», и определенно не истории. которые имеют только «арест»

Похоже, что полнотекстовый поиск не учитывает кавычки в строке И другие термины одновременно.

Я пробовал:

MATCH(headline,byline,body,keywords) 
AGAINST('"John Smith" arrest' IN BOOLEAN MODE)

и

MATCH(headline,byline,body,keywords) 
AGAINST('"John Smith" + arrest' IN BOOLEAN MODE)

Было бы нормально просто сделать что-то подобное?

MATCH(headline,byline,body,keywords) 
AGAINST('John + Smith + arrest' IN BOOLEAN MODE)

Это может сработать хорошо, но не совсем точно.

Спасибо за помощь.

Ответы [ 3 ]

2 голосов
/ 10 ноября 2011

По умолчанию полнотекстовый поиск объединяет термины, используя OR.Это означает, что в первом примере вы ищете строки со словом «арест» ИЛИ фразой «Джон Смит».Чтобы в возвращаемых строках содержались оба термина, используйте оператор «плюс»:

MATCH(headline,byline,body,keywords) 
AGAINST('+"John Smith" +arrest' IN BOOLEAN MODE)
2 голосов
/ 10 ноября 2011

По http://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html, формат:

'+"John Smith" +arrest'
1 голос
/ 10 ноября 2011

Я не уверен, что " и + могут быть объединены, но попробуйте это

MATCH(headline,byline,body,keywords) 
AGAINST('+"John Smith" +arrest' IN BOOLEAN MODE)

, если не работает, то это должно

WHERE
  MATCH(headline,byline,body,keywords) 
  AGAINST('"John Smith"' IN BOOLEAN MODE)
AND
  MATCH(headline,byline,body,keywords) 
  AGAINST('+arrest' IN BOOLEAN MODE)

документы http://dev.mysql.com/doc/refman/5.0/en/fulltext-boolean.html

...