Это ответ на ваш первоначальный вопрос, а затем ваш ответ / вопрос .
Я уже использовал поисковую систему Sphinx (довольно давно, поэтому я немного заржавел) и нашел ее очень хорошей, даже если иногда документации немного не хватает .
Я уверен, что есть и другие способы сделать это, либо с помощью собственного пользовательского кода, либо с помощью других поисковых систем - Sphinx, как раз тот, который я использовал. Я не предполагаю, что он будет делать все, что вы хотите, просто так, как вы хотите, но я достаточно уверен, что он сделает большинство из них довольно легко и намного быстрее, чем все, что написано только на PHP / MySQL.
Я рекомендую прочитать Создайте пользовательскую поисковую систему с помощью PHP , прежде чем копаться в документации Sphinx . Если вы не думаете, что это подходит после прочтения этого, достаточно справедливо.
В ответ на ваши конкретные вопросы я собрал несколько ссылок из документации, а также некоторые соответствующие цитаты:
отфильтровывает общие слова (как вы, возможно, заметили, «список» «из» и «intel» отсутствуют в списке)
11.2.8. стоп-слова
Стоп-слова - это слова, которые не
быть проиндексирован. Как правило, вы бы поставили большинство
частые слова в списке стоп-слов
потому что они не добавляют большую ценность
результаты поиска, но потребляют много
ресурсы для обработки.
Что касается «процессора» (множественное число против единственного числа), то лучше ли использовать конкретный тип (единственное или множественное число), оба или точные (т. Е. «Процессор» отличается от «процессора»)?
11.2.9. словоформы
Формы слова применяются после
токенизацию входящего текста
правила charset_table. Они существенно
позвольте заменить одно слово другим.
Как правило, это будет использовано для
разные формы слова в одном
нормальная форма (например, для нормализации всех
варианты, такие как "прогулки", "гуляли",
"гулять" до нормальной формы "гулять").
Он также может быть использован для реализации
вытекающие исключения, потому что
не применяется к словам, найденным в
список форм.
Продолжая предыдущий пункт, как определить множественное число (разные вкусы: test => tests fish => fish and leaf => leaves)
Sphinx поддерживает Алгоритм управления портерами
Алгоритм определения портера (или
«Портер Стеммер» - это процесс для
устранение простуды морфологического
и флексиональные окончания слов в
Английский. Его основное использование как часть
термин процесс нормализации, который
обычно делается при настройке
Информационно-поисковые системы.
Допустим, я хотел использовать поисковый термин "vendor: intel", где vendor указывает имя поля (field_name), как вы думаете, это окажет огромное влияние на сервер sql?
3,2. Атрибуты
Хорошим примером для атрибутов будет
таблица сообщений форума. Предположим, что только
поля заголовка и содержания должны быть
полнотекстовый поиск - но это
иногда также требуется ограничить
поиск определенного автора или
подфорум (т. е. искать только эти строки
которые имеют некоторые конкретные значения
столбцы author_id или forum_id в
Таблица SQL); или сортировать совпадения по
столбец post_date; или для группирования соответствия
сообщений по месяцу post_date и
рассчитать количество совпадений для каждой группы.
Этого можно достичь, указав все
упомянутые столбцы (исключая заголовок
и содержание, которые являются полнотекстовыми
поля) как атрибуты, индексируя их,
а затем с помощью вызовов API для настройки
фильтрация, сортировка и группировка.
Вы также можете использовать 5.3. Расширенный синтаксис запроса для поиска определенных полей (в отличие от фильтрации результатов по атрибутам):
оператор поиска поля:
@vendor intel
Как поисковая система индексирует набор полей и связывает найденные фразы / ключевые слова / и т. Д. С конкретным идентификатором поля?
8.6.1.Query
В случае успеха Query () возвращает набор результатов, который содержит некоторые из найденных совпадений (согласно запросу SetLimits ()) и дополнительную общую статистику по каждому запросу.> Результирующий набор представляет собой хеш (специфичный для PHP; другие языки могут использовать другие структуры вместо хеша) со следующими ключами и значениями:
"соответствует":
Хеш, который отображает идентификаторы найденного документа в другой маленькийхэш, содержащий вес документа и значения атрибутов (или массив похожих небольших хэшей, если SetArrayResult () был включен).
"total":
Общее количество совпадений, полученных на сервере (т. е. на серверпобочный результат) по этому запросу.Вы можете получить до этого количества совпадений с сервера для этого текста запроса с текущими настройками запроса.
"total_found":
Общее количество соответствующих документов в индексе (которые были найдены и обработаны на сервере).
"words":
Хеш, который отображает ключевые слова запроса (сложенные, запаздывающие и иным образом обработанные) в небольшой хеш со статистикой по ключевым словам ("документы", "попадания").
"error":
Запрос об ошибке, о котором сообщает searchd (строка, читаемая человеком).Пусто, если ошибок не было.
"warning":
Запрос предупреждения, отправленный searchd (строка, читаемая человеком).Пусто, если не было предупреждений.
Также см. Листинг 11 и Листинг 13 из Создание пользовательского поискового движка с PHP .