В панели управления модулем на вкладке «Настройки» — «HTML-документы» можно указать, какие части HTML-страниц будут индексироваться, а значит, будут доступны для поиска.
По умолчанию индексируется содержимое HTML-страниц между комментариями <!-- content -->
и <!-- /content -->
, а если их нет — всё содержимое тэга body
.
Из содержимого будут исключены все части страниц, указанные в поле «Области, содержимое которых не индексируется». По умолчанию это содержимое между комментариями <!-- noindex -->
и <!-- /noindex -->
, содержимое тэгов script
и style
.
Вы можете указать собственные области, подлежащие индексированию или исключаемые из него:
aside
//div[@class="menu"]
<div class="Menu">
.)#<!--junk-->(.+?)<!--/junk-->#i
#
».)В процессе обработки HTML-страниц они преобразовываются в объект класса DOMDocument (см. http://php.net/domdocument), поэтому их исходный код в момент выполнения xpath-запросов и регулярных выражений может отличаться от полученного с сайта:
&
» будет заменен на «&
»;<br />
будет преобразован в <br>
;Например, некорректный с точки зрения стандартов фрагмент <div><b>text</div></b>
будет преобразован в <div><b>text</b></div>
.
В связи с указанными особенностями могут возникать ошибки при индексировании страниц с тэгом <script>
с кодом, выводящим тэги </body>
и </html>
. В случае, когда подобный код необходим, можно разбивать данные тэги: document.write("</" + "body>")
.
При использовании стандартной службы поиска имеется возможность сохранять фрагменты HTML-страниц в отдельные поля (вкладка «Настройки» — «HTML-документы», блок «Извлечение данных»). Эти фрагменты могут быть получены на странице с результатами поиска из массива $f_meta[имя_поля]
, использованы для сортировки результатов (например, сортировка товаров по цене или другой характеристике) или для организации простого фасетного поиска (например, поиск по определённому автору). Для выбора фрагментов можно использовать имена тэгов, xpath-запросы и регулярные выражения, аналогично указанию фрагментов, подлежащих индексированию (см. выше).
Каждое поле данных имеет настройки:
Примечание: если для решения вашей задачи не нужен полнотекстовый поиск, следует использовать стандартные механизмы фильтрации результатов NetCat — см. раздел «Поиск и выборка»).
На странице с выводом полной информации о товаре необходимо добавить разметку для извлечения необходимой информации (в данном случае — цены). Также добавим код, подсказывающий модулю поиска, что это страница с товаром:
<div data-type="goods"> Описание...<br /> Цена: <span class="price">20000</span> руб.<br /> </div>
Добавим информацию о полях на вкладке «Настройки» — «HTML-документы»:
//div[@data-type]/@data-type
(получить значение атрибута data-type
тэга div
), тип: строка, поле участвует в поиске, недоступно в результатах, не нормализуется, не участвует в сортировке.//span[@class='price']
(получить содержимое тэга span
с классом price
), тип: целое число, поле участвует в поиске, доступно в результатах, не нормализуется, участвует в сортировке.После переиндексации страниц с товарами появятся следующие возможности:
$f_meta['price']
.page_type:goods
.sortby=price
при обращении к компоненту поиска (sortdirection=asc
— сортировка по возрастанию, sortdirection=desc
— по убыванию; по умолчанию результаты сортируются по убыванию).page_type:goods price:[1000 TO 5000]
.Большое число дополнительных полей, по которым разрешен поиск, может замедлить поиск, поэтому не стоит злоупотреблять этой возможностью.