За последние 24 часа нас посетили 37959 программистов и 1811 роботов. Сейчас ищут 833 программиста ...

Индекс fulltext не работает

Тема в разделе "PHP для новичков", создана пользователем DemoN1810, 26 дек 2015.

  1. DemoN1810

    DemoN1810 Новичок

    С нами с:
    16 дек 2015
    Сообщения:
    97
    Симпатии:
    0
    Сперва делал выборку из базы по LIKE, но слишком часто перестал находить, добавил строкам индекс FULLTEXT, делаю запрос
    Код (PHP):
    1. "SELECT столбец2 FROM таблица WHERE MATCH (столбец1) AGAINST ('".$текст."') LIMIT 1" 
    и получаю ошибку: Can't find FULLTEXT index matching the column list, в чём проблема?

    Подсказка от модератора:
    Любой код или текст конфигурации пишите между тегом [code=php] и [/code].
    Используйте отступы в коде для форматирования текста.
    Это помогает быстрее понять вас, увеличивает шанс на получение ответа.
    Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, любая другая разметка, результаты array/object dump и т. д.
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    в том что полнотекстового индекса на "столбец1" не существует, наверное. учи английский. в тексте ошибки вообще все сказано. нефиг с такими вещами на форум обращаться.
     
  3. DemoN1810

    DemoN1810 Новичок

    С нами с:
    16 дек 2015
    Сообщения:
    97
    Симпатии:
    0
    я и так полиглот, а этот индекс я ставил и на столбец1, и на столбец2, может потому что у меня mariadb?
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    нет, от машки это не зависит. дай актуальный дамп структуры таблицы.
     
  5. DemoN1810

    DemoN1810 Новичок

    С нами с:
    16 дек 2015
    Сообщения:
    97
    Симпатии:
    0
    Код (PHP):
    1. CREATE TABLE IF NOT EXISTS `bot` (
    2.   `talk` text NOT NULL,
    3.   `answer` text NOT NULL,
    4.   FULLTEXT KEY `index` (`talk`,`answer`),
    5.   FULLTEXT KEY `talk` (`talk`,`answer`),
    6.   FULLTEXT KEY `tlk` (`talk`,`answer`),
    7.   FULLTEXT KEY `talk_2` (`talk`,`answer`)
    8. ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 
    ой, кажется это все мои попытки добавить индекс

    Подсказка от модератора:
    Любой код или текст конфигурации пишите между тегом [code=php] и [/code].
    Используйте отступы в коде для форматирования текста.
    Это помогает быстрее понять вас, увеличивает шанс на получение ответа.
    Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, любая другая разметка, результаты array/object dump и т. д.
     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    восхитительно. я тут не вижу "столбец1". значит его действительно нет :D
    бай зе вей, а нафиг четыре одинаковых индекса делать?
     
  7. DemoN1810

    DemoN1810 Новичок

    С нами с:
    16 дек 2015
    Сообщения:
    97
    Симпатии:
    0
    так я думал если по-другому сделать, то предыдущий сам удалиться, а они вот все, столбец1 на самом деле answer
     
  8. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    пробовал два индекса делать? по одному на колонку в смысле.
     
  9. DemoN1810

    DemoN1810 Новичок

    С нами с:
    16 дек 2015
    Сообщения:
    97
    Симпатии:
    0
    я читал что так нельзя, тогда вообще одуреет
     
  10. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    от чего одуреет? где ты читал?
     
  11. DemoN1810

    DemoN1810 Новичок

    С нами с:
    16 дек 2015
    Сообщения:
    97
    Симпатии:
    0
    я весь гугл перерыл, не вспомню, подойдём с другой стороны, почему LIKE не подходит для чат-бота, ведь они выполняют одинаковые задачи насколько понимаю? есть в talk "здравствуй", но когда пишу "здравствуй друг дней моих суровых" (в шаблоне стояли с двух сторон %) он молчал?
     
  12. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ну ты сравнил жопу с пальцем. лайк ищет совпадение строки. то есть он будет каждую строку слева-направо читать в поиске этого совпадения. если ты сделаешь обычный индекс то будет искаться быстро для шаблонов вроде сло% - б-дерево и всё такое. работает быстро. а если будешь делать %лов% то никакой индекс не поможет потому что всё равно нужно перебирать всю строку и так для каждого кортежа.

    полнотекстовый индекс же он на то и полнотекстовый что дает возможность искать по слову и даже словоформе при этом выдерживая большие объемы текста. содержимое каждого поля разбивается на слова, слова на словоформы и по этому безобразию уже строится словарь.

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

    в общем ты как-то не так понял то что нагуглил.
     
  13. DemoN1810

    DemoN1810 Новичок

    С нами с:
    16 дек 2015
    Сообщения:
    97
    Симпатии:
    0
    пример того что я бы хотел есть в самом начале этого поста
     
  14. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    и? я-то понял. а ты?
     
  15. DemoN1810

    DemoN1810 Новичок

    С нами с:
    16 дек 2015
    Сообщения:
    97
    Симпатии:
    0
    ошибка то осталась, я только сегодня узнал о fulltext, так что не справлюсь, я тут подумал, почему бы не regexp/regex?
     
  16. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    потому что регулярное выражение будет применяться на строки каждого кортежа. как и лайк. как и эквал. то есть на всю таблицу.
    полнотекстовый индекс ищет по словарю, который хранится отдельно и к которому предоставляется апи поиска - мач-эгейнст.
     
  17. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    да, fulltext будет покруче чем LIKE, да и возможностей больше.
     
  18. DemoN1810

    DemoN1810 Новичок

    С нами с:
    16 дек 2015
    Сообщения:
    97
    Симпатии:
    0
    и всё таки я вот как решил сделать, учитывая что в базе 31 тыс шаблонов, возможность что по шаблону совсем ничего не найдётся равно 0,0001%
    Код (PHP):
    1. $string = explode(" ", $talk);
    2. $answ=mysql_query("SELECT answer FROM bot WHERE talk LIKE '%".$string[0]." ".$string[1]."%' LIMIT 1") or die(mysql_error());
    3. if($answ) {
    4. while($answer=mysql_fetch_array($answ)) {
    5. echo $answer[0];
    6. }
    7. }
    8. elseif(!$answ) {
    9. $answ2=mysql_query("SELECT answer FROM bot WHERE talk LIKE '%".$string[0]."%' LIMIT 1") or die(mysql_error());
    10. if($answ2) {
    11. while($answer2=mysql_fetch_array($answ2)) {
    12. echo $answer2[0];
    13. }
    14. }
    15. }
    16. elseif(!$answ2) {
    17. $answ3=mysql_query("SELECT answer FROM bot WHERE talk LIKE '%".$string[1]."%' LIMIT 1") or die(mysql_error());
    18. if($answ3) {
    19. while($answer3=mysql_fetch_array($answ3)) {
    20. echo $answer3[0];
    21. }
    22. }
    23. } 
     
  19. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    DemoN1810 ещё посмотри elasticsearch, sphinxsearch
     
  20. DemoN1810

    DemoN1810 Новичок

    С нами с:
    16 дек 2015
    Сообщения:
    97
    Симпатии:
    0
    да да, смотрел сфинкса, я обычно свой парсер делаю
     
  21. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    он с mysql_ на mysqli_ перейти не может, а ты ему про свина.
     
  22. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Думаю PaaS он осилит.
     
  23. DemoN1810

    DemoN1810 Новичок

    С нами с:
    16 дек 2015
    Сообщения:
    97
    Симпатии:
    0
    как вообще paas относится к теме поста? я не понимаю твою логику
     
  24. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    чтобы самостоятельно не администрировать elasticsearch