FULLTEXT поиска не будет достаточно, нужно обойти, какие-нибудь идеи?

0

В настоящее время я не могу использовать индексы FULLTEXT для поиска целых слов, потому что мой сервер не позволит меньше символов, чем 4 в строке поиска.

Мне нужно обходное решение, после чего вы ребята.

Я хочу иметь возможность вводить "bmw 330", а затем получать результаты от mysql с целыми совпадениями, такими как "bmw 330".

Должен ли я рассматривать стороннюю поисковую систему для этого?

Как я могу сделать это в PHP?

Спасибо

Теги:
full-text-search

7 ответов

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

Если вы хотите точно соответствовать, то вы хотите

SELECT * FROM table WHERE text_column = 'bmw 330'

.

  • 0
    Получается ли это так, даже если text_column 'bmw 330 в отличном состоянии'?
  • 0
    ОК, это не так. Вам, вероятно, понадобится немного больше фильтрующего кода или вы согласитесь с предложением Яна и будете использовать Lucene или что-то еще.
2

Вы можете использовать что-то вроде Zend Lucene. Он написан на PHP, поэтому вам не нужно ничего устанавливать.

  • 0
    Lucene или Sphinx - отличные поисковые решения, которые легко интегрируются с PHP
  • 0
    на самом деле! Однако проблема в том, что он, вероятно, не может установить Sphinx, поэтому я не рекомендовал его.
1

Вы говорите "мой сервер", поэтому я предполагаю, что у вас есть прямой доступ к его конфигурации:

Вы можете изменить минимальные символы, необходимые для поиска FULLTEXT в MySQL, просто измените следующую строку (в my.cnf) в соответствии с вашими потребностями:

[mysqld]
ft_min_word_len=3

С наилучшими пожеланиями,
Fabian

  • 0
    нет у меня нет прямого доступа ... я имел в виду свою компанию веб-хостинга ... извините
1

Так что, если вы пишете SQL следующим образом:

SELECT * FROM table WHERE text_column LIKE '%bmw 330%' 

?

  • 0
    Я пробовал это, это не будет работать, не так ли? Потому что, когда я попробовал, он вернул «bmw 330», даже если я написал «bm» ...
  • 0
    Ох ... тогда ты не хочешь НРАВИТСЯ, хочешь ... мой следующий ответ.
0

Хорошо, у вас здесь несколько предложений. Лучший способ, безусловно, использовать специализированный поисковый движок, такой как Lucene.

Если вы не можете использовать что-то вроде Lucene, у меня есть идея для массивно хакерского обходного пути.

  • Создайте второе текстовое поле в таблице
  • Всякий раз, когда ваше текстовое поле обновляется, напишите его копию во второе текстовое поле. Используйте регулярное выражение для поиска слов длиной менее 4 символов и добавьте заранее определенную строку для каждого случая: bmw = > bmwABCDEF
  • Для каждого входящего поискового запроса используйте одно и то же регулярное выражение, чтобы добавить строку к каждому слову < 4 символа. bmw 300 затем станет bmwABCDEF 300ABCDEF и соответствующим образом соответствует.

Это очень хаки и нужно пройти через возможные побочные эффекты, но может работать лучше, чем ничего.

  • 0
    интересный подход ... но действительно очень хакерский
0

SELECT * FROM table WHERE column LIKE '% bmw 330%'?

0

Как насчет

SELECT * FROM table WHERE text_column LIKE '% bmw 330 %'

(обратите внимание на пробелы после и до%)

?

Некоторые ограничения: он найдет полные слова, но не найдет

bmw 330(mint condition)
SPECIAL OFFER!!!!!bmw 330

Ещё вопросы

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