Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Java-скрипт для поиска. (https://javascript.ru/forum/misc/2043-java-skript-dlya-poiska.html)

2oo 25.10.2008 17:19

Java-скрипт для поиска.
 
Приветствую! Народ помогите найти скрипт для реализации поиска. Необходим скрипт, который выполнял бы поиск текста по сайту на всех страницах... Заранее спасибо :) :) :)

Octane 25.10.2008 17:23

Такое не на JavaScript делают

2oo 25.10.2008 19:01

На яве возможно такое реализовать. На PHP найти легче. Но меня интересует именно ява...

Octane 25.10.2008 19:28

Во первых не «ява», а «JavaScript», если вы конечно не «Java» имели ввиду, тогда вам в другой форум. «JavaScript» и «Java» совершенно разные вещи.
Во вторых, для поиска по сайту требуется серверная часть, и если вы и найдете «JavaScript» каким-то образом реализующий возможности поиска, то это скорее всего будет скрипт поисковой системы «Google», «Яндекс», «GoGo» или какой-то другой, и он будет использовать свой сервер для выдачи поисковых запросов. Но на чистом «JavaScript» без применения серверных технологий, еще раз повторюсь, такие вещи не делают.

Kolyaj 25.10.2008 22:09

Цитата:

Сообщение от 2oo
На яве возможно такое реализовать.

Теоретически можно, но работать это будет архи-медленно.

Gvozd 26.10.2008 02:59

Kolyaj,+1)))
представляю себе этот ужас

alexKniaz 28.10.2008 07:52

<script laguage="javascript" type="text/javascript">
function search(site,text)
{
document.getElementById('ifrSearch').src='http://google.ru/search?q=site:'+site+' '+text;
}
function start_search()
{
search('адрес сайта',document.getElementById('what').value);
}
</script>
<input type="text" id="what" /><input type="button" onclick="start_search();" /><br />
<iframe id="ifrSearch"></ifame>

Только двиг чужой всё же....

2oo 28.10.2008 14:31

Прошу прощения, забыл указать что поиск необходим именно локальный... т.е. грубо говоря сайт будет записан да CD. И туда необходимо интегрировать поиск... Скрипты, которые будут обращаться в сеть, не катят (

Kolyaj 28.10.2008 14:37

Ну тогда все элементарно :)
Перед записью диска, создаете индекс всех текстов, а потом уже по этому индексу JavaScript'ом быстренько все ищете. Можно усложнить задачу, и реализовать морфологию. Да вообще, много чего можно, и работать это будет достаточно шустро (данные-то из инета качать не надо), вопрос в реализации.

2oo 28.10.2008 14:53

Цитата:

Сообщение от Kolyaj (Сообщение 7701)
Ну тогда все элементарно :)
Перед записью диска, создаете индекс всех текстов, а потом уже по этому индексу JavaScript'ом быстренько все ищете. Можно усложнить задачу, и реализовать морфологию. Да вообще, много чего можно, и работать это будет достаточно шустро (данные-то из инета качать не надо), вопрос в реализации.

Огромное спасибо за ответ) Еще вопросик: каким образом создается индекс всех тесктов? И возможно ли проиндексировать все слова находящиеся в html, т.е. целиком на сайте?

Kolyaj 28.10.2008 14:57

Это вам уже на форум о поисковых технологиях.

2oo 29.10.2008 11:45

И всеже если кто ответит, буду признателен... Заранее спасибо.

alexKniaz 29.10.2008 23:00

Если из-под IE, то File System Objects и флаг вам в руки:)
А вообще можно сделать файл, типа такого:
<a href="file_0.html"></a>
<a href="file_1.html"></a>
<a href="file_2.html"></a>

Сделать пагу, загружающую файл в iframe (разумеется, невидимый).Затем пага его парсит, получаая ссылки на читабельные файлы (не нужен ведь в .jpg файлах поиск?). По этим ссылкам в другой ифрейм (тоже невидимый) загрузить файл, получить его код, при наличии искомой строки, вывести ссылку.

Андрей Параничев 30.10.2008 22:47

Это ужасное и ничем неоправданное решение. Такие вещи должны делаться на сервере.

Gvozd 31.10.2008 19:01

Цитата:

Сообщение от 2oo
каким образом создается индекс всех тесктов?

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

/>\s*([^<>]*\S+[^<>]*)\s*</U
за точность регулярки не ручаюсь, не проверял.синтаксис взял PHP-шный.
Цитата:

Сообщение от 2oo
И возможно ли проиндексировать все слова находящиеся в html, т.е. целиком на сайте?

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

alexKniaz 01.11.2008 16:06

Это ужасное и ничем неоправданное решение. Такие вещи должны делаться на сервере.

Человек же написал, чтопоиск должен происходить на локалхосте, и страницы находятся тоже на нём? Или меня глюкануло????

2oo 01.11.2008 16:25

Цитата:

Сообщение от alexKniaz (Сообщение 8002)
Это ужасное и ничем неоправданное решение. Такие вещи должны делаться на сервере.

Человек же написал, чтопоиск должен происходить на локалхосте, и страницы находятся тоже на нём? Или меня глюкануло????

Нет, не глюкануло)))

этоЯ 24.04.2009 22:09

ПОМОГИТЕ ПОЖАЛУЙСТААААА.... Я НИЧЕГО НЕ СМЫСЛЮ В JAVASCRIPT.... ПОДСКАЖИТЕ ПОЖАЛУЙСТА.... МОЖНО ЛИ НАЙТИ СЛОВО В ТЕКСТЕ С ОПРЕДЕЛЕННЫМ НОМЕРОМ С ПОМОЩЬЮ JAVASCRIPT, А ПОТОМ ЕЩЕ И УДАЛИТЬ ЕГО...... ИНАЧЕ Я СКОРО СОЙДУ С УМА.............................. S........O.........S

Gvozd 24.04.2009 22:30

можно

x-yuri 25.04.2009 01:57

если Caps Lock выключить
и вообще специальный смайлик есть - :help:

Kolyaj 25.04.2009 14:36

И вообще истеричкам на JS нельзя программировать. Их браузеры быстренько с ума сведут :)

Gvozd 25.04.2009 15:20

Они кого угодно сведут с ума.:)
Надо быть психически устойчивым.не путать с "психически здоровым".вот такие как раз легче всего ломаются

guest 08.06.2009 03:15

воттолько без alert не работает цикл прохождения
 
<script>
var LinkMass=new Array(4);
var  r=s=str1=str2=str3=''; 

var i=cikl=0;
var n=5;
 LinkMass[0]='index.html';
 LinkMass[1]='produkciya/index.html';
 LinkMass[2]='proizvodstvo/index.html';
 LinkMass[3]='kontakti/index.html';
 LinkMass[4]='fotogalery/index.html';




function func()
{ 
while (cikl <5)
	{

	document.getElementById('Result').innerHTML=document.getElementById('Result').innerHTML+cikl+"<br>";
poisk(cikl);
	cikl++;	
	}
}

function poisk (i)
{


r=srch.value;
s=document.getElementById('Result').innerHTML;
str3 = " "; str1 = ""; 

alert (i);


fram.document.location.href=(LinkMass[i]);
document.getElementById('frams').src=LinkMass[i];
    str1 =(fram.document.body.innerText.substring(fram.document.body.innerText.indexOf(r,0),fram.document.body.innerText.indexOf(r,0)-100));
    str2 =(fram.document.body.innerText.substring(fram.document.body.innerText.indexOf(r,0),fram.document.body.innerText.indexOf(r,0)+250));

    str3 = ('<b>...</b>'+ str1 + str2 + '<b>...</b>');

    if (str1 != '')
        {
        document.getElementById('Result').innerHTML=s+"<br><p align='justify'><a class=\'Menu' href=\'"+ document.getElementById('frams').src +"\'>"+fram.document.title + "</a> 

"+"<br>"+ document.getElementById('frams').src +"<br><br>"+"<a class='Text' style='cursor: default'>" + str3 + "</a>"+"<hr></p>"
   	}

    
}
</script>

Gvozd 08.06.2009 03:21

это что такое?

Bakinec 08.12.2010 02:47

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

на странице напиши:
<script SRC="database.txt"></script>

потом форма поиска:

<form method="POST" name="form1" style="font-size: 9"><td width=740 class="nav" style="background-image: url('b5.gif'); background-color:#F4F6F8" height="32"><p align="right"><input type="text" name="sub"
       size="15" style="font-size: 9"><input type="reset" value="Поиск" onClick="dolt()" style="font-size: 9">



туда же загрузи текстовый файл с названием database.txt куда запишешь :

/******************************************************************
  **                                                                               **
  **  Variable WebPage JavaScript                                  **
  **  Version 1.0 	                                                       **
  **  Web:                                                                     **
  **  E-mail:                                                                  **
  **  Copyright © 2007                                                   **
  **  All Rights NOT Reserved.                                               **
  **                                                                              **
  ******************************************************************/
 
 Keyword = new Object();
 Address = new Object();
 Keyword[0] = 2

 Keyword[1] = "Очень красивый город.... "
 Address[1] = "http://www.Baku.az/"

 Keyword[2] = "Последние новости Азербайджана "
 Address[2] = "http://1news.az/"

 function contains(sub,s){
 strlen1=sub.length
 strlen2=s.length
 istrue=false
 for(i=0;i<=strlen2;i++)
 {
 comp=s.substring(i-1,strlen2)
 comp=comp.substring(0,strlen1)
 if(comp==sub){
 istrue=true
 break  
    }   
   }
 return istrue
  }

 function dolt() {
 loopCount=0;
 var Found=false
 var Item=document.forms[0].sub.value.toLowerCase();
 
stats='toolbar=no,location=no,scrollbars=yes,directories=no,status=yes,menubar=no,height=500,width=790,top=0,left=0'
stats += 'scrollbars=yes,resizable=yes'
MsgBox = window.open ("","msgWindow",stats) 
MsgBox.opener = window;
MsgBox.opener.name = "opener";
MsgBox.document.write("<head><title>Результат поиска по сайту: для  "+Item+"</title></head>");

 if(document.form1.sub.value=="")
 MsgBox.document.write('<h5><font face="Verdana,Arial,Helvetica" color="#000000">Общая информация для поиска по сайту<HR></h5></font>');
 else
 MsgBox.document.write('<h5><font face="Verdana,Arial,Helvetica" color="#000000">Результат поиска по сайту: для '+Item+'<HR></h5></font>');
 for(var i=1; i<=Keyword[0]; i++){
 contains(Item,Keyword[i].toLowerCase())
 if(comp==Item){
 loopCount++;
 Found=true;
  MsgBox.document.write('<div align="center"><center><table border="0" width="740" cellspacing="0" cellpadding="8"><tr><td width="2%" bgcolor="#FFFffF" height="18"align="center"><font face="Verdana,Arial,Helvetica" size="2" color="#000000"><h5>'+loopCount+'. </h5></font></td>    <td width="150%" bgcolor="#FFFFFF" height="18" align="left"><font color="#000000"></font><fontcolor="#000000"><font face="Verdana,Arial,Helvetica" size="2" color="#000000">'+Keyword[i]+'<BR><A HREF='+Address[i]+' target="_blank">Подробнее...</A></font></h1></font><font color="#000000"></font></td></tr></table></center></div>')
  MsgBox.document.write('<script Language="JavaScript">window.status=("Total '+loopCount+' found")</'+'script'+'>');

     }
  }

if(!Found)
MsgBox.document.write('<font face="Verdana,Arial,Helvetica" size="2" color="#FF0000">По вашему запросу ничего не найдено. </font>')
MsgBox.document.write('<font face="Verdana,Arial,Helvetica" size="2" color="#0054A0"><p align="center"><HR><a href="mailto:почта@mail.az">© ваша компания LTD  2007 - 2008 </a></p></font>')
MsgBox.document.write('<style><!--A:link{color: #FF0000; text-decoration:none} A:visited {color: #0054A0; text-decoration:none}--></style>')
if(loopCount==0){
MsgBox.document.write('<script Language="JavaScript">window.status=("Total 0 found")</'+'script'+'>');
      }
    }

stopkran 11.12.2010 13:10

Жаль, что не заметил этого вопроса раньше. Ну, может, кому-то ещё пригодится... Решения существуют - достаточно стандартные, и не очень:

1) HTML Help Workshop: скомпилировать набор веб-страниц с указанием опции "Полнотекстовый поиск";

2) Если данные достаточно однородные, запихать их в текстовую таблицу, написать небольшой обработчик на Javascript для объекта
Tabular Data Control и опять же скомпилировать всё с помощью HTML Help Workshop - когда-то я так целые словари делал (http://figur.ir2.ru/tolktdc.zip, 3.5 МБ, Словарь Ожегова)


Часовой пояс GMT +3, время: 08:58.