Использование Indextank для поиска по сайту


Я ищу бесплатные простые в реализации и без рекламы альтернативы Google CSE.

Я нашел indextank, который выглядит достаточно простым способом индексирования контента, но он не сканирует ваш сайт. Думаю, я предполагал, что смогу передать ему URL-адрес ala Google CSE.

Поэтому, есть ли простой способ настроить PHP-скрипт для выполнения обхода? т.Е. Передать ему URL-адрес и проиндексировать все веб-страницы в этом домене.

Конечным результатом является то, что я могу разместить поиск по сайту на своем веб-сайте.

Author: Lightness Races in Orbit, 2011-05-27

1 answers

Я реализовал эту функцию на своем сайте. В основном у меня есть HTML-форма, в которой пользователь может запросить:

<form method="post" action="[_LINK_HELP_SEARCH_]">
  <div class="static-text">(_INTRO_)</div>
  <input class="inline" name="q" id="search" type="text" value="[_QUERY_]" />
  <input class="inline" type="submit" value="(_SEARCH_)" />
  <div class="micro-text">(_EXAMPLE_)</div>
</form>

Примечание: Все [XXX] и (ГГГГ) являются полями шаблона, вы должны заменить их в своем коде.

При отправке формы PHP-файл разбивает запрос на слова:

$query = preg_replace('/\s{2,}/', ' ', $query);
$words = explode(' ', $query);

Поиск каждого файла в целевой папке (

$help_files = _get_all_files('help');
$help_files = array_slice($help_files, 0, MAX_RESULTS);
foreach($help_files as $file) {

Обратите внимание, что я ищу только в папке "справка", вы должны адаптировать это к своим собственным потребностям. Обратите также внимание, что _get_all_files - это пользовательская функция, которая просто перечисляет все PHP-файлы в данной папке.

Затем загрузите и проанализируйте текст:

$text_file = '';
$filename = $file['page'];
if (_file_exists($filename)) {
    $text_file = _read_php_file($filename);
}

$text_file = strtolower($text_file);
$text_file = strip_tags($text_file);
$text_file = preg_replace('/\[_(.*?)_\]/', '...', $text_file);
$text_file = preg_replace(array('/\s{2,}/', '[\t\n]'), ' ', $text_file);

Обратите внимание, что _read_php_file считывает файл содержимого PHP, т.е. то же самое, что получит пользователь, если вызовет этот файл. Это связано с тем, что я использую шаблоны, а мои HTML-файлы не являются прямыми. Если вы используете статический HTML, вы можете использовать readfile() или аналогичный.

Далее, поисковые слова:

$score = 0;
foreach ($words as $word) {
    if (strpos($text_file, $word) !== false) {
        $score++;
    }
}

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

Далее вам может быть интересно создать отрывок текста:

$pos = strpos($text_file, $words[0]);
$cut_ini = max($pos - RESUME_LIMIT/2, 0);
$extract = substr($text_file, $cut_ini, RESUME_LIMIT);
$extract = "...$extract...";

И, наконец, я сохраняю всю эту информацию в выходном массиве (для каждого найденного файла), если оценка является значимой:

if (($score > 0) && (count($words) / $score > 0.7)) {
    $result = array (
        'extract'   => $extract,
        'title'     => $file['title'],
        'link'      => $file['page'],
        'score'     => $score
    );
    $results[] = $result;
}

Конечно, все это должно быть использовано для каждого файла, который вы хотите проиндексировать, и в конце вы должны отсортировать свой массив:

usort($results, "_search_sort");

С помощью этой функции:

function _search_sort($a, $b) {
    if ($a['score'] == $b['score']) {
        return 0;
    }
    return ($a['score'] > $b['score']) ? -1 : 1;
}

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

 1
Author: Ivan, 2011-07-13 07:08:26