На главную
RiLax Manual
© С. Тарасов
Расширенный поиск
Чтобы использовать вохможность расширенного поиска необходимо указать
тип каждого поля и какие поля нужно индексировать.
Возможны следующие варианты.
- 1 - поле будет проиндексировано как обычный текст.
- 2 - поле содержит ХТМЛ теги.
- 4 - поле является целым числом. Для таких полей возможны операции сравнения
(то есть можно искать документы, в которых данное поле имеет значение более 1000 и т.п.).
- 8 - поле является вещественным числом. Как и для предыдущего случая возможны
операции сравнения. Учтите, что индекс, созданный для данного поля не будет обладать
переносимостью между различными платформами (хотя остальные файлы останутся переносимыми
и все другие функции поиска будут работать).
- 16 - поле является строкой с датой. Скрипт попытается распознать дату и
перевести ее в другой формат, пригодный для сравнения. Дата может быть представлена
одним из следующих видов: 23.03.98, 23/03/98, 23.03.1998, Mar 23 1998. Другие форматы
могут быть добавлены при необходимости. Порядок следования числа и месяца (сначала число, затем месяц или наоборот)
определяется параметром date_format в конфигурационном файле.
Для каждого поля выберите желаемые варианты, просуммируйте числа и укажите их
в конфиге следующим образом:
$attr_conf[0] = 1+2;
$attr_conf[1] = 1+2;
$attr_conf[2] = 1+2+16;
$attr_conf[3] = 8;
$attr_conf[4] = 4;
Например, у вас есть база ZIP-кодов США в следующем формате:
76050;+32.336003;-097.311068;;GRANDVIEW;48;251;TX;TEXAS;JOHNSON
76051;+32.932843;-097.080802;;GRAPEVINE;48;439;TX;TEXAS;TARRANT
где:
- 76050 - ZIP-код
- +32.336003 - широта
- -097.311068 - долгота
- "" - служебное поле
- GRANDVIEW - название почтового отделения
- 48 - код штата
- 251 - код графства
- TX - абревиатура штата
- TEXAS - штат
- JOHNSON - графство
Следующие параметры можно использовать в данном случае:
$attr_conf[0] = 1+4;
$attr_conf[1] = 0;
$attr_conf[2] = 0;
$attr_conf[3] = 0;
$attr_conf[4] = 1;
$attr_conf[5] = 1+4;
$attr_conf[6] = 1+4;
$attr_conf[7] = 1;
$attr_conf[8] = 1;
$attr_conf[9] = 1;
Язык запросов
- Поиск в определенных полях - необходимо добавить в строку запроса номера полей,
в которых должно содержаться заданное слово (например "&a=1&a=3").
Например, если нужно найти все ZIP-коды в графстве DALLAS, можно использовать такой запрос:
search.pl?q=DALLAS&a=9
- Если требуется найти одно слово в одном поле и другое слово
в другом поле, это можно сделать следующим образом:
search.pl?q8=TEXAS&q9=DALLAS - все ZIP-коды в штате TEXAS в графстве DALLAS
(если еще добавить "q=word", то это слово будет искаться во всех проиндексированных полях).
- Операции сравнения для числовых полей:
- a4lt=10 - значение поля 4 меньше 10;
- a4le=10 - значение поля 4 меньше или равно 10;
- a4gt=10 - значение поля 4 больше 10;
- a4ge=10 - значение поля 4 больше или равно 10;
- a4eq=10 - значение поля 4 равно 10;
- a4ne=10 - значение поля 4 не равно 10;
Например, все ZIP-коды в диапазоне 0-1000:
search.pl?a0gt=0&a0le=1000
Если в одном запросе используется несколько операций сравнения, они обрабатываются
используя логику "AND", то есть "a1lt=10&a2gt=10" найдет документы, где поле 1 меньше
10 и поде 2 больше 10. Добавьте параметр "ctype=OR", чтобы изменить логику на "ИЛИ"
("a1lt=10&a2gt=10&ctype=OR").
Для полей, являющихся датой, операции сравнения записываются следующим образом:
search.pl?q0=ivanov&a2gt=01.01.2000
Сортировка результатов
Результаты поиска могут быть отсортированы по какому-либо полю.
Для этого нужно использовать параметр "s" с номером поля (например
"search.pl?q0=ivanov&a2gt=01.01.2000&s=2"). Учтите, что сортировка
по текстовому полю может потребовать значительное количество времени,
если поиск вернул много совпадений.
Результаты можно сортировать сразу по нескольким полям
(работает только с текстовыми полями). Например:
"q=word&s=2_3" - результаты будут отсортрованы по второму
полю, а если второе поле совпадает у нескольких записей,
то по третьему.
Печать результатов
Используйте такую строку в шаблоне - %attr_N% (где N - номер поля)
чтобы напечатать значение поля N.
|