Навигация по сайту в пользовательском поиске Google

Некоторое время назад я прикрутил к своему блогу поиск Google на основе пользовательского поиска. После некоторого осмотра возможностей пользовательского поиска я обнаружил “уточнения”, позволящие создавать дополнительные ссылки в интерфейсе поиска для уточнения результатов поиска.

Поскольку я пишу и о C++, и о Java, и о Ruby, естественным было бы добавить туда уточнения вида “C++”, “Java” и “Ruby”, позволяющие включать в результаты поиска только страницы с заданными тэгами. Как это выглядит можно посмотреть на картинке внизу, или по после нажатия кнопки “Найти” в блоге справа вверху.

Здесь я опишу, как такое можно осуществить.

Настройка системы поиска

Для начала, разумеется, необходимо создать систему пользовательского поиска. Это можно сделать на странице Custom Search Engine. При создании системы в список сайтов необходимо, разумеется включить свой сайт (или сайты).

Затем, в настройках системы зайти в раздел Уточнения(Refinements). Там можно добавить уточнение, возникает форма вида (например, сначала добавим раздел Ruby):

Основная проблема состоит в том, что написать в строке слов, чтобы выбрать все страницы, содержащие тэг Ruby.

Пришлось поискать описание различных операторов расширенного поиска для Google. Наиболее подробное описание различных операторов поиска я нашел здесь. Однако, для решения задачи мне понадобились всего три:

  • | - альтернативные варианты (или).
  • [ и ] - скобки для группировки элементов в запросах.
  • * - оператор, который обозначает одно произвольное слово. Например в запросе "Мама * раму" вместо * может находится ровно одно слово, то есть по этому запросу найдется текст "мама мыла раму", но не "мама мыла большую раму" или "мама раму".

Далее, в начале каждой записи после заголовка я вставил код, выводящий список всех тэгов записи, перед которым находилось слово "тэги". После этого пришлось подождать некоторое время, пока Google переиндексирует все страницы сайта =).

После того, как все страницы переиндексированы, можно легко выделить все, у которых первым тэгом является Ruby с помощью запроса "Тэги: Ruby"

Теперь необходимо учесть то, что тэг Ruby стоит не всегда на первом месте. Здесь-то и нужен оператор * - запрос для тэга на втором месте выглядит как "Тэги: * Ruby". Аналогично для третьего, четвертого и далее.

Чтобы сделать запрос, который выбирает все страницы, содержащие тэг на любом из первых N мест можно задать следующую конструкцию: ["Тэги: Ruby"|"Тэги: * Ruby"|"Тэги: * * Ruby"|"Тэги: * * * Ruby"|"Тэги: * * * Ruby"]. Тут N=5. Если Вы ставите больше тэгов, то запрос придется сделать несколько длинее.

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

Форма поиска

Для поиска Google предлагает AJAX-форму, однако мне больше понравился вариант стандартной формы:


<form action="http://www.google.com/cse" id="cse-search-box">
<input name="cx" value="012005588861949235995:unlj7xfsgyy" type="hidden">
<input name="ie" value="UTF-8" type="hidden">
<input name="q" size="30" type="text">
<input name="sa" value="Найти" type="submit">
</form>

012005588861949235995:unlj7xfsgyy - это идентификатор моей системы поиска. Соответственно, для Вашей системы он будет другой, найти его можно, например, в URL при редактировании системы поиска.

 Подписаться на RSS

 #  #  #  #  #  #  #  #  #  #

blog comments powered by Disqus