Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите написать нормальный запрос для поиска, по базе MySQL 
:(
    Опции темы
Borland_Delphi_6
Дата 11.2.2006, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


LoneLINEss
****


Профиль
Группа: Участник Клуба
Сообщений: 2509
Регистрация: 5.11.2002
Где: in fortune dreams ...

Репутация: нет
Всего: 20



Цитата(AntonioBanderaz @ 10.2.2006, 20:16 Найти цитируемый пост)

Ну как-то так короче...

Спасибо конечно, но я поиск под движок пишу, так что мне все эти классы ни к чему smile

Цитата(AntonioBanderaz @ 10.2.2006, 20:16 Найти цитируемый пост)

ALTER  TABLE  `ldu_news`  ADD  FULLTEXT (  `news_text`, `news_title`  );


Ну я и тормоз smile Я до этого пытался индексы создать запросом

Код

ALTER  TABLE  `ldu_news`  ADD  FULLTEXT (  [b]`news_text,news_title`[/b]  );


smile Так вроде бы заработало, но... Есть ли возможность использовать в этом варианте логические "И" / "ИЛИ"? Если да, то как? Поддерживается ли это в MySQL напрямую, или необходимо самому придумывать? Примерные наброски того, как это можно было бы сделать с LIKE я приводил выше, но тут я что-то не знаю smile


--------------------
Blind Guardian Fan :: BMSTU Student :: A polar bear is a rectangular bear after a coordinate transform.

Мои фотографии
PM MAIL WWW   Вверх
AntonioBanderaz
Дата 11.2.2006, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Velichko Anton
**


Профиль
Группа: Участник
Сообщений: 851
Регистрация: 28.4.2005
Где: Санкт-Петербург

Репутация: 2
Всего: 18



Цитата(Borland_Delphi_6 @ 11.2.2006, 16:51 Найти цитируемый пост)
но я поиск под движок пишу, так что мне все эти классы ни к чему

а какая разница, он наиболее универсален...

просто
Код

$search = new MysqlSearch('host','user','password','db');     
$search->newSearch('ТО ЧТО ТЫ ХОЧЕШЬ НАЙТИ',array("ldu_news"=>Array('news_text', 'news_title')));    
print_r($search->getResults()); 


И он у тебя будет искать в таблице ldu_news в полях news_text и news_title...
по умолчанию любой разделитель является логическим OR, только эскейпь строку перед подачей...

Чтобы твою логику добавить просто нужно поменять ф-ию
Код

    function splitWhat() {     
        $separators = " ,.!?-";     
        $wordArray = array();     
        $total = 0;     
        for($token = strtok($this->what,$separators);$token !== false;$token = strtok($separators)) {     
            if($token != "" ) {     
                if(!isset($word_count[strtolower($token)])) {     
                     $word_count[strtolower($token)] = 1;     
                     array_push($wordArray,strtolower($token));     
                }     
                else $word_count[strtolower($token)]++;     
                $total++;     
            }      
        }     
        for($i=0;$i<count($wordArray);$i++) {     
            $this->createResultMass($i,count($wordArray),$wordArray);     
        }     
    }
она и генирит запрос к базе... она также разбивает на группы слов...


--------------------
ГЫ... 
PM MAIL ICQ   Вверх
IZ@TOP
Дата 12.2.2006, 00:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 4
Всего: 73



Borland_Delphi_6, а с чего ты взял что fulltext поиск будет тормозить? Вообще-то насколько я знаю, он работает на треть быстрее, нежели тот же like. А других способов поиска по тексту, кроме двух описанных, я не знаю! Просвятите дуралея!


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Borland_Delphi_6
Дата 12.2.2006, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


LoneLINEss
****


Профиль
Группа: Участник Клуба
Сообщений: 2509
Регистрация: 5.11.2002
Где: in fortune dreams ...

Репутация: нет
Всего: 20



IZ@TOP,

Вроде бы в доках написано, что в fulltext таблицы данные будут добавлятся медленнее...


AntonioBanderaz,

Это я к тому, что мне нет особого смысла использовать твой класс целиком, т.к. поиск у меня будет в одном файле и мне не трудно вручную написать запрос smile Но разобраться в работе приведенного выше кода попытаюсь, т.к. он мне может очень пригодится. О результатах сообщу.
Спасибо!
Добавлено @ 11:55
AntonioBanderaz,

Хотя я тут подумал (за 2 минуты-то! smile ), может быть нет смысла изобретать велосипед... Попробую использовать твой класс, посмотрим, что выйдет smile


--------------------
Blind Guardian Fan :: BMSTU Student :: A polar bear is a rectangular bear after a coordinate transform.

Мои фотографии
PM MAIL WWW   Вверх
Borland_Delphi_6
Дата 12.2.2006, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


LoneLINEss
****


Профиль
Группа: Участник Клуба
Сообщений: 2509
Регистрация: 5.11.2002
Где: in fortune dreams ...

Репутация: нет
Всего: 20



AntonioBanderaz,

Попытался я воткнуть в свой скрипт этот класс - пришел к выводу, что нет в этом особого смысла...
Цитата(AntonioBanderaz @ 11.2.2006, 22:26 Найти цитируемый пост)
по умолчанию любой разделитель является логическим OR, только эскейпь строку перед подачей...


Что касается OR: есть страница с заголовком вроде "Обзор Galaxy 6600GE". Если я хочу поискать "Обзор Galaxy" - нет проблем, результат верен, а если "Обзор 6600GE" - то тут уже ничего не выдается. Вопрос в силе - есть ли возможность использовать OR и AND без BOOLEAN MODE?


--------------------
Blind Guardian Fan :: BMSTU Student :: A polar bear is a rectangular bear after a coordinate transform.

Мои фотографии
PM MAIL WWW   Вверх
IZ@TOP
Дата 13.2.2006, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 4
Всего: 73



Borland_Delphi_6, так мы же играем на выборке?! Или нет?


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Borland_Delphi_6
Дата 13.2.2006, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


LoneLINEss
****


Профиль
Группа: Участник Клуба
Сообщений: 2509
Регистрация: 5.11.2002
Где: in fortune dreams ...

Репутация: нет
Всего: 20



IZ@TOP,

Чего-то я тебя не понял... smile


--------------------
Blind Guardian Fan :: BMSTU Student :: A polar bear is a rectangular bear after a coordinate transform.

Мои фотографии
PM MAIL WWW   Вверх
IZ@TOP
Дата 14.2.2006, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 4
Всего: 73



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


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Borland_Delphi_6
Дата 14.2.2006, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


LoneLINEss
****


Профиль
Группа: Участник Клуба
Сообщений: 2509
Регистрация: 5.11.2002
Где: in fortune dreams ...

Репутация: нет
Всего: 20



IZ@TOP,
Отнюдь, обновлять-то сайт часто надо. Но не это главное, т.к. у меня сервер 4х AMD Opteron... smile


--------------------
Blind Guardian Fan :: BMSTU Student :: A polar bear is a rectangular bear after a coordinate transform.

Мои фотографии
PM MAIL WWW   Вверх
Borland_Delphi_6
Дата 15.2.2006, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


LoneLINEss
****


Профиль
Группа: Участник Клуба
Сообщений: 2509
Регистрация: 5.11.2002
Где: in fortune dreams ...

Репутация: нет
Всего: 20



Никак не возьму в толк: что нужно сделать, чтобы MySQL мне вернула строку лишь в том случае, если есть полное совпадение. Пример:

Цитата(Text1)

Даже и не знаю, какой текст сочинить, поэтому просто напишу здесь слово дом (без кавычек smile )


Цитата(Text2)

А у вас есть домашние животные?


По запросу "дом" текст 1 должен найтись, а текст 2 - нет. Как такое устроить? Обратите внимание, что искомое слово может содержаться в любом месте текста, поэтому банальное сравнение через "=" не подойдет...


--------------------
Blind Guardian Fan :: BMSTU Student :: A polar bear is a rectangular bear after a coordinate transform.

Мои фотографии
PM MAIL WWW   Вверх
CTAPbIuMABP
Дата 17.2.2006, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 17.2.2006
Где: Киев

Репутация: -1
Всего: 1



Цитата

Никак не возьму в толк: что нужно сделать, чтобы MySQL мне вернула строку лишь в том случае, если есть полное совпадение



Код

SELECT * FROM `table` WHERE field LIKE '% дом %' LIMIT 20


а конкретно для твоего примера

Код

SELECT *, MATCH (field) AGAINST ('дом') as rel FROM `table` WHERE `field` LIKE '% дом %' ORDER BY rel DESC LIMIT 20


Это сообщение отредактировал(а) CTAPbIuMABP - 17.2.2006, 15:06
PM WWW ICQ Skype   Вверх
AntonioBanderaz
Дата 18.2.2006, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Velichko Anton
**


Профиль
Группа: Участник
Сообщений: 851
Регистрация: 28.4.2005
Где: Санкт-Петербург

Репутация: 2
Всего: 18



не всё найдёт, допустим в строке

Код

Дом, который построил Джек...


Слово дом он не найдёт...
Добавлено @ 19:40
Код

 SELECT *, MATCH (field) AGAINST ('дом') as rel FROM `table` WHERE `field` LIKE '% дом %' OR `field` LIKE '% дом,%' OR `field` LIKE '% дом:%' OR `field` LIKE '% дом!%' OR ....  ORDER BY rel DESC 



--------------------
ГЫ... 
PM MAIL ICQ   Вверх
Borland_Delphi_6
Дата 19.2.2006, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


LoneLINEss
****


Профиль
Группа: Участник Клуба
Сообщений: 2509
Регистрация: 5.11.2002
Где: in fortune dreams ...

Репутация: нет
Всего: 20



Спасибо за советы, но я уже решил остановится на другом варианте с использованием RLIKE, который вполне нормально находит точное совпадение, в то же время, если использовать его для поиска одного слова, то выдает больше результатов, чем FULLTEXT Search, т.е. для RLIKE более мягкие условия получаются что-ли... Результат моих (или даже наших? smile ) трудов можно понаблюдать здесь: http://code.pp.ru/search.php Это на случай, если кому-то вдруг будет интересно smile


--------------------
Blind Guardian Fan :: BMSTU Student :: A polar bear is a rectangular bear after a coordinate transform.

Мои фотографии
PM MAIL WWW   Вверх
IZ@TOP
Дата 19.2.2006, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 4
Всего: 73



Цитата(Borland_Delphi_6 @ 14.2.2006, 16:55 Найти цитируемый пост)
Отнюдь, обновлять-то сайт часто надо. Но не это главное, т.к. у меня сервер 4х AMD Opteron..

А, ну если у тебя сидит 20 авторов и каждый раз в минуту что-то постит... и посетителей в этот момент на сайте в течении часа в районе тысячи... даже в таком случае сомневаюсь что производительность упадет очень сильно... тем более при такой системе...


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Borland_Delphi_6
Дата 19.2.2006, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


LoneLINEss
****


Профиль
Группа: Участник Клуба
Сообщений: 2509
Регистрация: 5.11.2002
Где: in fortune dreams ...

Репутация: нет
Всего: 20



IZ@TOP,
Да с этим уже разобрались smile


--------------------
Blind Guardian Fan :: BMSTU Student :: A polar bear is a rectangular bear after a coordinate transform.

Мои фотографии
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0569 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.