Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   Создание поисковика. (http://forum.oszone.net/showthread.php?t=121960)

stalingrad432006 04-11-2008 19:17 942923

Создание поисковика.
 
Хочу сразу извиниться за неправильную терминологию ( я с ней не совсем знаком :) ) и, возможно, неправильное размещение темы ( может быть, ее надо разместить в другом разделе ). Суть вопроса: как создать поисковик, который при выборе одного из двух объектов предоставляет выбор еще из семи объектов, далее, при выборе последнего можно выбрать еще из 50 объектов и жмем "Поиск". После чего загружается страница с объетами из базы данных ( которую, чуть позже, так же предстоит написать ). На каком языке пишется все это безобразие :) ? По возможности, укажите ссылки, где подробно расписано создание поисковика и баз данных и их взаимодействие( аки для чайника ). Спасибо.

tolbol 04-11-2008 20:10 942964

Если вы в программировании полный 0, то вы однако начали не с того места.
Начните хотя бы с изучения PHP и mySQL, если финансы не позволяют заплатить разработчику за то что вам нужно.

Вот немного :) инфы:
1. Создание поисковой системы
2. Создание баз данных mySQL

P.S.
В своё время когда в PHP я был полный 0, мне понадобился компонент.
У меня было 2 варианта:
1. заказать у знающего человека и радоваться счастью.
2. понять самому как это делается на PHP.
В итоге я выбрал второй вариант и теперь создаю всё что мне нужно.

Coutty 04-11-2008 20:21 942972

Имеется два объекта - это HTML.
Кликаешь по одному из них и открывается ещё 7. Это JavaScript (причём данные уже имеются в HTML-странице).
Кликаешь по одному из семи и открывается ещё 50. Это тоже JavaScript, только данные желательно брать с сервера, т.к. если на каждую кнопку по 50 - это 700 штук получается - много. Берётся с сервера без перезагрузки страницы - AJAX.
Выборка из базы данных идёт на PHP. Обычно запросы вида "SELECT * FROM `table_name` WHERE `text` LIKE '%текст_для_поиска%'.
Вернуть результаты можно с перезагрузкой страницы (что проще) или без неё - AJAX (что немного сложнее).

В общем, нужно знать довольно много всего :) Но если знаешь, то можно написать за пару часов (знаешь как свои три пальца - напишешь быстрее) + время на отладку.

Если интересуют подробности, спрашивай(те).
Но ссылки искать вряд ли буду :)

stalingrad432006 04-11-2008 20:24 942977

Цитата:

Цитата tolbol
1. заказать у знающего человека и радоваться счастью. »

с этим проблем нет. Для меня гораздо важнее
Цитата:

Цитата tolbol
2. понять самому как это делается на PHP »

..................................
Вот неплохое объяснение для новичка. Теперь, хотя бы, можно определиться в терминах :).

tolbol 05-11-2008 11:24 943472

То что для вас главным является
Цитата:

Цитата stalingrad432006
понять самому как это делается на PHP »

это похвально, но в создании собственного поисковика в начале пути будет немногим полезно.

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

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

По мне дак как я уже говорил проще взять систему и заточить её под себя, для этого как раз могут помочь основные знания по php и mySQL, и время в разы сэкономлено и результат положительный.

stalingrad432006 05-11-2008 11:30 943482

Цитата:

Цитата tolbol
для этого как раз могут помочь основные знания по php и mySQL »

уже начинаю вникать потихонечку.
Цитата:

Цитата tolbol
в итоге лично я бы взял за основу готовую систему »

наверняка же в интернете есть готовые поисковики. Вы уж посоветуйте темноте безнадежной :) где их взять-то можно. Там, глядишь, и расковыривать начну под себя. :)

Igor_I 05-11-2008 13:34 943618

Поисковик это очень сильно сказано. Насколько я понял нужна всего лишь поисковая форма, причем даже поиск не будет производится по случайным словам. stalingrad432006, про ту ссылку для новичка можно забыть, если не нужна индексация, ранжирование и т.д.
Coutty, сказал все правильно. Для начала нарисуй саму форму, как ты её видишь. В HTML.

tolbol 05-11-2008 17:15 943862

Цитата:

Цитата stalingrad432006
наверняка же в интернете есть готовые поисковики. Вы уж посоветуйте темноте безнадежной где их взять-то можно. »

В интернете и бирём :)

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

ManHack 08-11-2008 12:06 946770

Вопрос в тему: есть ли какие-нибудь готовые скрипты интернет-поисковиков, автономные от гугла, яндекса и др. или хотя бы выдающие результаты в собственном окне, а не окне другого поисковика.
Поисковик именно по интернету, а не по одному сайту.

Coutty 08-11-2008 16:37 947014

ManHack, вы себе это как представляете? Предположим, что поиск выполняется не по всему инету, а, скажем, по крошечной доле. Хотя бы в 100 млн. сайтов. С каждого сайта нужно слить килобайт по 100 текста (где-то больше, где-то меньше). Я про уже обработанный текст. Итого: для такой малюсенькой доли интернета вам понадобится 10 ТБ дисковой памяти. Примерно столько же оперативной (нам же быстрый поиск по базе данных нужен). Представьте какие вычислительные мощности, чтобы на каждый запрос всю эту базу обрабатывать...

В общем, дешевле будет купить у яндекса разрешение на использование результатов его БД в XML-формате и форматировать их по своему усмотрению. Будет якобы ваш поисковик.

tolbol 08-11-2008 18:29 947133

Цитата:

Цитата Coutty
В общем, дешевле будет купить у яндекса разрешение на использование результатов его БД »

Не совсем дешевле, тем более у какого то яндекса...

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

Так вот заводим собственный поисковик в гугл, настраивам как надо и пользуемся, результаты хоть в отдельном окне хоть в своём, есть ещё в добавок Ajax API, что позволит сделать поиск достаточно динамичным.

Вот ссылка для регистрации http://www.google.com/coop/cse/

Coutty 08-11-2008 18:48 947155

tolbol, и где у гугла написано, что поиск по всему интернету выполняется? Там можно делать лишь по нескольким сайтам.
У яндекса же - по всей сети.

tolbol 09-11-2008 08:00 947549

Я вроде такого не писал, что поиск выполняется по всему интернету.

Цитата:

Цитата tolbol
он со своей базой в сто раз лучше яндекса по качеству результатов »

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

Цитата:

Цитата tolbol
заводим собственный поисковик в гугл, настраивам как надо и пользуемся »

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

Coutty 09-11-2008 08:52 947563

tolbol, я отвечал на 9 сообщение, в котором стоит вопрос про поиск по всему интернету. Следом Вы добавляете про поиск от гугла по нескольким сайтам в противовес предложенному яндексу по глобальной сети. И что нужно было подумать? Ладно, будем считать, что вы на первое сообщение отвечали))

Цитата:

Цитата tolbol
тут при желании можно и половину базы гугла под себя оформить. »

Нельзя. Наверняка есть ограничение, пусть и не явное. Скажем, больше 5 МБ методом POST не отправлять. Так не охватить даже 1% рунета.

tolbol 09-11-2008 10:30 947609

Цитата:

Цитата Coutty
Наверняка есть ограничение, пусть и не явное »

Если доподлинно не известно о таком ограничение, стоит ли об этом спорить.

Coutty 09-11-2008 10:45 947614

tolbol, хорошо, явное ограничение - размер оперативной памяти вашего компьютера и ваше же время. Устраивает?
Перечислите там хотя бы 1000 сайтов и будет понятно о чём речь.
Бывают, конечно, особо упорные люди, которые в гору идут, вместо того чтобы обойти её, но, надеюсь, к присутствующим здесь это не относится ;)

Igor_I 10-11-2008 23:53 949076

Цитата:

Цитата tolbol
Так вот заводим собственный поисковик в гугл, настраивам как надо и пользуемся, результаты хоть в отдельном окне хоть в своём, есть ещё в добавок Ajax API, что позволит сделать поиск достаточно динамичным. »

Покажи ...

tolbol 11-11-2008 10:42 949285

Igor_I, захочешь, сам посмотришь.

Igor_I 11-11-2008 19:07 949778

tolbol, что посмотрю? Я имелл ввиду фразу "т.е. выбираем либо свой сайт либо группу, тут при желании можно и половину базы гугла под себя оформить." Во-первых не хочу регистрироватся, во-вторых, еслы ты уверен - значит знаешь, а раз знаешь можешь показать.
А пока я только один такой поисковик видел - http://www.lada-poisk.ru/. Услуга гугля "поиск по сайту" не считается. Хотя и то, что я показал именно им и является, наверно меня смутила фраза в строке поиска.

tolbol 11-11-2008 20:19 949864

Здесь гугл ищит по сайту http://www.7hitov.ru

Здесь по группе сайтов одной тематики http://www.lobzer.com

Цитата:

Цитата Igor_I
при желании можно и половину базы гугла под себя оформить »

я имею ввиду, что добавляя сайты по которым будет осуществляться поиск можно в список добавить любой сайт проиндексированный гуглом и осуществлять поиск со своего сайта, если конечно же я не просмотрел пункт с каким либо ограничением на этот счёт :)

stalingrad432006 19-11-2008 22:51 957508

Сверстал РНР-страничку с тремя формами и одной кнопкой. В первой форме 2 объекта ( пронумерованы 1.1, 1.2 ), во второй 8 ( пронумерованы 2.1, 2.2, 2.3,...,2.8 ), в третьей 52 ( пронумерованы 3.1, 3.2, 3.3,...,3.52 ) и одна кнопка "Поиск". Примерно следующим образом выглядит:

Код набросал такой:

PHP код:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> 
<title></title> 
</head> 
<body>
 <?php
   $db 
mysql_connect("localhost");
   
mysql_select_db("firstbd",$db);

   
$result mysql_query("SELECT *  FROM objects",$bd);   
   
$myrow mysql_fetch_array($result);    

   do   
   {   
   echo 
"Объект №"$myrow['такой-то']."<br/>";   
   echo 
$myrow['вот это']."<br/>";   
   echo 
$myrow['вот то']."<br/>";   
   echo 
$myrow['не это']."<br/>";   
   echo 
$myrow['не то']."<br/>";   
   echo 
$myrow['и т.д.']."<br/>";   
   }   
   while (
$myrow mysql_fetch_array($result)); 
 
?>           
<div style="text-align:center"/>             
<p>Для того, чтобы выбрать интересующий объект, выполните четыре следующих шага:             
</p><br/><br/>
         <p>1.<select size="8" cols="15" style="width: 150px; vertical-align:text-top"/>
                    <option value="1.1"/>1.1</option>
                    <option value="1.2"/>1.2</option>
                  </select>
                2.<select size="8" cols="15" style="width: 190px; vertical-align:text-top"/>
                    <option value="2.1"/>2.1</option>
                    <option value="2.2"/>2.2</option>
                    <option value="2.3"/>2.3</option>
                    <option value="2.4"/>2.4</option>
                    <option value="2.5"/>2.5</option>
                    <option value="2.6"/>2.6</option>
                    <option value="2.7"/>2.7</option>
                    <option value="2.8"/>2.8</option>
                  </select>
                3.<select size="8" cols="15" style="width: 150px; vertical-align:text-top"/>
                    <option value="3.1"/>3.1</option>
                    <option value="3.2"/>3.2</option>
                    <option value="3.3"/>3.3</option>
                    <option value="3.4"/>3.4</option>
                    <option value="3.5"/>3.5</option>
                    <option value="3.6"/>3.6</option>
                    <option value="3.7"/>3.7</option>
                    <option value="3.8"/>3.8</option>
                    <option value="3.9"/>3.9</option>
                    <option value="3.10"/>3.10</option>
                    <option value="3.11"/>3.11</option>
                    <option value="3.12"/>3.12</option>
                    <option value="3.13"/>3.13</option>
                    <option value="3.14"/>3.14</option>
                    <option value="3.15"/>3.15</option>
                    <option value="3.16"/>3.16</option>
                    <option value="3.17"/>3.17</option>
                    <option value="3.18"/>3.18</option>
                    <option value="3.19"/>3.19</option>
                    <option value="3.20"/>3.20</option>
                    <option value="3.21"/>3.21</option>
                    <option value="3.22"/>3.22</option>
                    <option value="3.23"/>3.23</option>
                    <option value="3.24"/>3.24</option>
                    <option value="3.25"/>3.25</option>
                    <option value="3.26"/>3.26</option>
                    <option value="3.27"/>3.27</option>
                    <option value="3.28"/>3.28</option>
                    <option value="3.29"/>3.29</option>
                    <option value="3.30"/>3.30</option>
                    <option value="3.31"/>3.31</option>
                    <option value="3.32"/>3.32</option>
                    <option value="3.33"/>3.33</option>
                    <option value="3.34"/>3.34</option>
                    <option value="3.35"/>3.35</option>
                    <option value="3.36"/>3.36</option>
                    <option value="3.37"/>3.37</option>
                    <option value="3.38"/>3.38</option>
                    <option value="3.39"/>3.39</option>
                    <option value="3.40"/>3.40</option>
                    <option value="3.41"/>3.41</option>
                    <option value="3.42"/>3.42</option>
                    <option value="3.43"/>3.44</option>
                    <option value="3.44"/>3.44</option>
                    <option value="3.45"/>3.45</option>
                    <option value="3.46"/>3.46</option>
                    <option value="3.47"/>3.47</option>
                    <option value="3.48"/>3.48</option>
                    <option value="3.49"/>3.49</option>
                    <option value="3.50"/>3.50</option>
                    <option value="3.51"/>3.51</option>
                    <option value="3.52"/>3.52</option>
                  </select>
             </p><br/><br/>
             <p>4.<input type="button" value="Поиск" onclick="Get_Logon()"  style="height: 25px; width: 190px; text-align:center"/>
             </p><br/><br/>
            </div>
          </body>
 </html>

И сам вопрос: Как сделать, что бы при выборе позиций в формах и при нажатии кнопки "Поиск" код РНР обращался к серверу и т.д. Другими словами, какой код написать и на каком языке для того, что бы оживить формы и кнопку "Поиск"? Спасибо. Если что-либо некорректно назвал или не достаточно ясно произвел постановку вопроса, просьба поправить.

Coutty 20-11-2008 04:06 957731

stalingrad432006, так формы-то и нет! Это весь код? Потому что я смотрю - Get_Logon() вызывается, но нигде не описыватеся.
Пишите так:
HTML код:

<form action='script.php' method='post'>
<select name='var1nya'>...</select>
<select name='var2nya'>...</select>
<input type='text' name='nyaText' value='Для примера' />
<input type='submit' value='Поиск' />
</form>

При нажатии на кнопку submit отсылаются данные на скрипт script.php методом post.
В самом скрипте получить доступ к переменным - $_POST['var1nya'], $_POST['var2nya'], $_POST['nyaText'].

Если хотите обработать правильность заполнения формы перед отправкой, то можно добавить JavaScript'а:
HTML код:

<form name='formSearch' action='script.php' method='post' onsubmit='check_data()'>
<select name='var1nya'>...</select>
<select name='var2nya'>...</select>
<input type='text' name='nyaText' value='Для примера' />
<input type='submit' value='Поиск' onclick='return false;' />
</form>

В функции check_data() нужно проверить данные и выполнить что-то вроде document.getElementById('formSearch').submit();

stalingrad432006 20-11-2008 04:57 957752

Цитата:

Цитата Coutty
так формы-то и нет! »

может я неправильно выразился. Я подразумевал под термином "форма" окошко со строчками, одну из которых надо обязательно выбрать ( в HTML, насколько я помню, это безобразие заключается в теги <form></form> ). Но, пока редактировал страничку сайта до минимума, который можно было бы выставить на форуме в качестве исходной, по собственной невнимательности, эти теги удалил вместе с остальным.
Смотрится комично, когда участник форума выставляет свое творенье на показ искушенной публике, декларирует наличие форм и их не указывает в коде. :biggrin:
Цитата:

Цитата Coutty
Это весь код? »

постарался выложить минимум, который будет смотреться в браузере и не отвлекать внимание на скрипты, к вопросу неотносящиеся:
Цитата:

$db = mysql_connect("localhost");
mysql_select_db("firstbd",$db);
если я не ошибаюсь, это подключение к MySQL-серверу и базе данных.
.................................................................
Цитата:

$result = mysql_query("SELECT * FROM objects",$db);
$myrow = mysql_fetch_array($result);
это выбор объекта из таблицы и вывод как массив.
.................................................................
Цитата:

do
{
echo "Объект №"$myrow['такой-то']."<br/>";
echo $myrow['вот это']."<br/>";
echo $myrow['вот то']."<br/>";
echo $myrow['не это']."<br/>";
echo $myrow['не то']."<br/>";
echo $myrow['и т.д.']."<br/>";
}
while ($myrow = mysql_fetch_array($result));
это вывод объектов в цикле.
...............................................................
На понимание остального содержимого Вашего поста мне необходимо время. Дело в том, что отродясь не программировал и сразу взялся за базы данных и РНР. Тяжеловато на первых порах приходится. Но, что-то мне подсказывает, что не все потеряно в этой области для меня :). Спасибо.

Coutty 20-11-2008 13:11 958021

stalingrad432006, простите, вы комментируете свой код для меня? Я-то понял :) Кстати, утром, когда я писал, кода было меньше. Да и сопровождающего текста тоже. Но нед надписи "последний раз редактировалось". У меня провал?))

Цитата:

$myrow = mysql_fetch_array($result);

do
{
echo "Объект №"$myrow['такой-то']."<br/>";
echo $myrow['вот это']."<br/>";
echo $myrow['вот то']."<br/>";
echo $myrow['не это']."<br/>";
echo $myrow['не то']."<br/>";
echo $myrow['и т.д.']."<br/>";
}
while ($myrow = mysql_fetch_array($result));
Зачем такая странная конструкция? Можно проще:
Цитата:

while ($myrow = mysql_fetch_array($result))
{
echo "Объект №"$myrow['такой-то']."<br/>";
echo $myrow['вот это']."<br/>";
echo $myrow['вот то']."<br/>";
echo $myrow['не это']."<br/>";
echo $myrow['не то']."<br/>";
echo $myrow['и т.д.']."<br/>";
}
И впереди не придётся инициализировать $myrow.
Вместо mysql_fetch_array() я предпочитаю использовать mysql_fetch_assoc(). Всё равно ведь только ассоциативными элементами массива пользуетесь, так зачем и нумерованный и ассоциативный вместе делать?

Цитата:

<div style="text-align:center"/>
<option value="2.2"/>2.2</option>
Такие строки некорректны с точки зрения HTML (сначала почему-то тег закрывает сам себя />, а потом ещё и другим закрывается. Тот же div не может быть одиночным тегом - иначе зачем он вообще нужен?
Вообще, достаточно написать <option>2.2</option>, чтобы передавались соответствующие данные. Вот если вам надо показывать одно, а передавать другое, то используем <option value='2.2'>Мяу-мур</option>.

Далее, повторюсь: в элементах должен быть атрибут name. Т.е. <select name='var1'>... Если имя не указано, то и данные вы потом в скрипте не обработаете. После отправки формы методом post скрипт может получить значение выбранного элемента в select'e по запросу, например, echo $_POST['var1']; Т.е. если был выбран элемент 2.2, то echo выведет 2.2.


Ладно, для понимания приведу конкретный пример:
PHP код:

<html><head><title>Заголовок</title></head>
<body>
<?php
if ($_POST['city']) // если передаётся запрос с формы, то входим в этот блок
  
{
  echo 
"Результаты поиска по городу " $_POST['city'];
  
$sql mysql_query("SELECT * FROM `table_name` WHERE `city`='" $_POST['city'] . "'"); // Обратите внимание на правильность расстановки кавычек.
 // можно использовать и такие запросы ... WHERE `city` LIKE '%" . $_POST['city'] . "%'". Тогда поиск осуществляться поиск не точного совпадения, а строк, содержащих значение. 
  // Но есть ограничение на минимальную длину строки в запросе LIKE. Какое именно - трудно сказать. 
  // Я писал поиск по прайсу, так там при запросе длиной 4 символа и меньше находилась всякая фигня. 
  //Даже на слово из трёх букв свой товар находился :) Хотя ничего такого в прайсе не было.
  
while ($result mysql_fetch_assoc($sql))
     {
     echo 
"Улица " $result['street'] . ", дом " $result['home'] . "<br />"// предполагается, что таблица имеет структуру [ id | city | street | home | и т.д. ]
     
}
  }
// а после вывода результатов показываем форму. Если не было запроса с формы, значит просто форма будет.
?>
  <form action="" method="post">
    <select name="city">
      <option checked="checked">Челябинск</option>
      <option>Москва</option>
      <option>Самара</option>
      <option value="Бобруйск">Замухрыжинск</option>
    </select>
    <br />
    <input type="submit" value="Отправить" />
  </form>
</body>
</html>

Теперь комментарии по html:
- В форме стоит action="" - отправка запроса на самого себя.
- <select name="city"> будет сохранять значение в переменную city ($_POST['city').
- По умолчанию в списке выбран Челябинск.
- Если в тэге <option> не указано значение value="nya", значит передаётся содержимое тэга. Т.е. для Челябинска, Москвы и Самары будет передаваться "Челябинск", "Москва" и "Самара" соответственно. При выборе "Замухрыжинск"а скрипт получит значение переменной $_POST['city'] == "Бобруйск" (указано значение value).


Время: 20:04.

Время: 20:04.
© OSzone.net 2001-