Страница 1 из 1

Полнотекстовый индекс

Добавлено: 2015.12.23, 12:00
lavrik
Хочу организовать поиск, запросом например:

Код: Выделить всё

SELECT 
    * 
FROM 
    Items 
WHERE MATCH (name, model) AGAINST ("test")
Попробовал выполнить его через консоль - ошибка:
#1214 - The used table type doesn't support FULLTEXT indexes

Нужен полнотекстовый индекс.
Вопрос: как через миграции его создать? в createIndex() нет даже параметра!!!

Re: Полнотекстовый индекс

Добавлено: 2015.12.23, 12:05
vitalik1183
Использовать Sphinx

Re: Полнотекстовый индекс

Добавлено: 2015.12.23, 12:19
lavrik
я его так и не смог поднять под openServer-ом
да и вообще, в моем случае это из "пушки по воробьям"...
Подумал и решил что обычного createCommand()-а будет достаточно.

Re: Полнотекстовый индекс

Добавлено: 2015.12.23, 12:20
vitalik1183
я его так и не смог поднять под openServer-ом
да я поднимал на винде - нормальный полет.
ну если из пушки по воробьям, то подозреваю что вам и LIKE простого будет достаточно ;)

Re: Полнотекстовый индекс

Добавлено: 2015.12.23, 12:24
zelenin

Re: Полнотекстовый индекс

Добавлено: 2015.12.23, 12:25
zelenin
lavrik писал(а):я его так и не смог поднять под openServer-ом
да и вообще, в моем случае это из "пушки по воробьям"...
Подумал и решил что обычного createCommand()-а будет достаточно.
то есть ставить левый опенсервер не из пушки, а сфинкс поставить - да? в чем разница?

Re: Полнотекстовый индекс

Добавлено: 2015.12.23, 12:36
lavrik
обожаю программистов!
Задашь вопрос, все кинутся тебе доказывать что тебе это не надо...

Вопрос ведь простой: Как через миграции создать FULLTEXT индекс?
Или вообще, возможно ли это?

Re: Полнотекстовый индекс

Добавлено: 2015.12.23, 12:42
vitalik1183
lavrik вы услышали умное слово и решили здесь потрепаться.
во первых фулиндекс работает только в MyISAM вы такой инфы не указали, у вас такой тип таблиц стоит ?
во вторых тема полнотекстового поиска это отдельная вещь любого проекта а вы тут решили в команде миграции чудо изобразить.

Re: Полнотекстовый индекс

Добавлено: 2015.12.23, 12:44
zelenin
lavrik писал(а):обожаю программистов!
Задашь вопрос, все кинутся тебе доказывать что тебе это не надо...
потому что сообщество нужно для развития его составляющих. Задавший вопрос в большинстве случаев не может сделать адекватный выбор инструмента, и в задачу "старшего" товарища входит в том числе подсказать в чем он ошибается.
lavrik писал(а):Вопрос ведь простой: Как через миграции создать FULLTEXT индекс?
Или вообще, возможно ли это?
в пользу моего тезиса служит то, что ошибка читаема и гуглится. У вас же не хватило квалификации, чтобы найти объяснение своей ошибки по первой же ссылке из гугла.

Я в чем-то не прав?
Если вы не поняли, о чем я пишу, поясню: вам уже ответили на ваш вопрос - вам осталось его прочесть.

Re: Полнотекстовый индекс

Добавлено: 2015.12.23, 13:38
lavrik
сфинкс так сфинкс...

Re: Полнотекстовый индекс

Добавлено: 2015.12.23, 13:39
vitalik1183
ну вот, другое дело :)

Re: Полнотекстовый индекс

Добавлено: 2015.12.23, 13:43
zelenin
lavrik писал(а):сфинкс так сфинкс...
а вот это поспешно. мы же не знаем че там у вас. может вы учебный проект делаете.

Re: Полнотекстовый индекс

Добавлено: 2015.12.23, 13:48
vitalik1183
а вот это поспешно. мы же не знаем че там у вас. может вы учебный проект делаете.
ну и что, блеснет в универе перед аудиторией инновациями :)

Re: Полнотекстовый индекс

Добавлено: 2015.12.23, 17:03
rugabarbo
vitalik1183 писал(а):
а вот это поспешно. мы же не знаем че там у вас. может вы учебный проект делаете.
ну и что, блеснет в универе перед аудиторией инновациями :)
Схватит двойку в дневник за то, что сделал не по методичке :mrgreen:

Re: Полнотекстовый индекс

Добавлено: 2015.12.23, 17:05
vitalik1183
да ладно. может тс вовсе не студент :)

Re: Полнотекстовый индекс

Добавлено: 2015.12.23, 18:53
vitalik1183
ну не юзал я ни разу сфинкс, и что такого?
вам никто ничего и не говорит нащет етого

Re: Полнотекстовый индекс

Добавлено: 2016.01.13, 11:41
lavrik
если тут ещё кто-то есть, спрошу...
Запилил я сфинкс, вроде работает, вроде нормально...
Поиск делаю так:

Код: Выделить всё

// $search  -  тут строка поиска
        $match = Yii::$app->sphinx->escapeMatchValue($search);
        $query = new \yii\sphinx\Query;
        
        $QUERY = $query
            -> select('id, vendor, price, name, model')
            -> from('Items')
            -> where(['if_show' => 1])
            -> limit(500)
            -> match(new \yii\db\Expression(':match', ['match' => '@(model) '.$match .' | '.'@(name) '.$match]));
        $RESULT    =    $QUERY -> all();
 
В $search у меня слово для поиска. Но что делать если у меня в $search 2 слова? Ничего не находит.
И гугл ничего не дал(((

Re: Полнотекстовый индекс

Добавлено: 2016.01.13, 18:42
Йож
У Вас в $search, когда два слова - они чем разделены? Попробуйте | и звездочки по краям каждого слова:
*красн*|*помидор* (можно и без звездочек наверно, не проверял)

Re: Полнотекстовый индекс

Добавлено: 2016.01.14, 10:01
lavrik
Йож писал(а):У Вас в $search, когда два слова - они чем разделены? Попробуйте | и звездочки по краям каждого слова:
*красн*|*помидор* (можно и без звездочек наверно, не проверял)
Заработало без звездочек, НО только после того как я убрал из поиска model:

Код: Выделить всё

        $match = Yii::$app->sphinx->escapeMatchValue( str_replace(' ', '|', $search) );
        $query = new \yii\sphinx\Query;
        
        $QUERY = $query
            -> select('id, vendor, price, name, model')
            -> from('Items')
            -> where(['if_show' => 1])
            -> limit(500)
            -> match(new \yii\db\Expression(':match', ['match' => '@(name) '.$match]));
 
но стоит добавить model:

Код: Выделить всё

-> match(new \yii\db\Expression(':match', ['match' => '@(name) '.$match.' | @(model) '.$match ]));
 
перестает искать...
Что не так?

Re: Полнотекстовый индекс

Добавлено: 2016.01.14, 10:28
lavrik
lavrik писал(а):
Йож писал(а):У Вас в $search, когда два слова - они чем разделены? Попробуйте | и звездочки по краям каждого слова:
*красн*|*помидор* (можно и без звездочек наверно, не проверял)
Заработало без звездочек, НО только после того как я убрал из поиска model:

Код: Выделить всё

        $match = Yii::$app->sphinx->escapeMatchValue( str_replace(' ', '|', $search) );
        $query = new \yii\sphinx\Query;
        
        $QUERY = $query
            -> select('id, vendor, price, name, model')
            -> from('Items')
            -> where(['if_show' => 1])
            -> limit(500)
            -> match(new \yii\db\Expression(':match', ['match' => '@(name) '.$match]));
но стоит добавить model:

Код: Выделить всё

-> match(new \yii\db\Expression(':match', ['match' => '@(name) '.$match.' | @(model) '.$match ]));
перестает искать...
Что не так?
Разобрался. Дело в скобках! нужно было обернуть все в скобки:

Код: Выделить всё

-> match(new \yii\db\Expression(':match', ['match' => '(@(name) '.$match.') | (@(model) '.$match.') | (@(vendor) '.$match.')' ]));