Полнотекстовый поиск по строке, заключенной в частично кавычки (mysql)

#mysql #full-text-search #boolean

#mysql — сервер #полнотекстовый поиск #логическое #mysql

Вопрос:

Я ищу в довольно большой базе данных статей, используя полнотекстовый поиск в 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)
  

Это могло бы сработать нормально, но было бы не совсем точно.

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

Ответ №1:

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

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

Ответ №2:

Согласно http://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html, формат:

 ' "John Smith"  arrest'
  

Ответ №3:

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

 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