mysql полнотекстовый поиск пуст - PullRequest
0 голосов
/ 16 декабря 2008

Я использую ruby ​​на рельсах с бэкэндом MySQL. У меня есть таблица с именем notes, и вот миграция, которую я использую для ее создания:

def self.up
  create_table(:notes, :options => 'ENGINE=MyISAM') do |t|
    t.string :title
    t.text :body

    t.timestamps
  end

  execute "alter table notes ADD FULLTEXT(title, body)"

end

Я хочу выполнить полнотекстовый поиск по полям заголовка и тела. Проблема в том, что полнотекстовый поиск всегда возвращается пустым. Например, если я добавлю эту строку в базу данных: Title: test, Body: test. Затем я запускаю этот запрос SELECT * FROM notes WHERE MATCH(title, body) AGAINST('test'). Возвращает ноль. Кто-нибудь может сказать мне, что я делаю неправильно и как заставить работать полнотекстовый поиск?

Ответы [ 2 ]

7 голосов
/ 16 декабря 2008

Я просто догадываюсь здесь, но в документации говорится:

Поиск на естественном языке переводит строка поиска как фраза в естественный человеческий язык (фраза в свободный текст). Там нет специальных операторы. Список стоп-слов применяется. Кроме того, слова, которые присутствуют в 50% или более строк считаются общие и не совпадают. Полный текст поиски - это поиск на естественном языке если РЕЖИМ В ЕСТЕСТВЕННОМ ЯЗЫКЕ модификатор задан или если модификатор отсутствует дается.

Поэтому, если есть только одна строка, и она содержит «тест», то «тест» присутствует в более чем 50% строк и поэтому не считается совпадением. Возможно попробуйте:

SELECT * FROM notes WHERE MATCH(title, body) AGAINST('test' IN BOOLEAN MODE)
0 голосов
/ 19 декабря 2008

Хотя это, вероятно, не отвечает на ваш конкретный вопрос, я просто выбрал бы Ferret или Solr в качестве поисковой системы, особенно если много текста. Оба очень просты в установке и мощны для загрузки. Ультрасфинкс - это еще один вариант.

С RoR я обычно не зацикливаюсь на попытках заставить что-то работать каким-то конкретным способом. Это все о том, чтобы быть проворным;) Вы видите.

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