Intereting Posts
Неустранимая ошибка: исключить исключение «RedisException» с сообщением «Redis server ушел» PHP file_get_contents Ошибка учетной записи службы SDK Google Диска «Аутентифицированный пользователь не установил приложение с идентификатором клиента …» Я хочу использовать функцию bcc или cc в этой функции почты? Вставка даты из формы с помощью PHP Mysql Перенос данных в Firebase из mysql Ошибка: новое значение должно быть массивом или экземпляром \ Traversable, заданного класса Entity TinyMVC Model / Plugin как реализовать? отправка почты с помощью php & escaping hotmails junk folder Могу ли я перенести PHP-код с моего сайта на C, чтобы создать приложение для iOS? Функция php mail () на localhost Предупреждение: Отсутствует граница в данных POST с несколькими данными / формами данных в Unknown в строке 0 MySQL, где column = 'x, y, z' Zend Framework: могу ли я просто получить параметры GET? Вычисление факторического ранга перестановки (N выбрать K)

Как реализовать простой поиск по сайту с php и mySQL?

Я создаю сайт, который позволяет пользователям отправлять кавычки. Как я могу создать (относительно простой?) Поиск, который возвращает наиболее релевантные кавычки?

Например, если поисковый термин был «индейкой», я возвращаю кавычки, где слово «индейка» появляется дважды перед кавычками, где оно появляется только один раз.

(Я бы добавил несколько других правил, чтобы помочь отфильтровать нерелевантные результаты, но моя главная проблема в том, что.)

Все предлагают полнотекстовый поиск MySQL, однако вы должны знать о ОГРОМНОЙ оговорке. Полнотекстовая поисковая система доступна только для механизма MyISAM (не InnoDB, который является наиболее часто используемым движком из-за его ссылочной целостности и соответствия ACID).

Таким образом, у вас есть несколько вариантов:

1. Самый простой подход излагается в дереве частиц . Вы можете actaully получать ранжированные поиски от чистого SQL (без полного текста, ничего не). Ниже приведенный SQL-запрос будет искать результаты таблицы и ранжирования исходя из количества вхождений строки в полях поиска:

SELECT SUM(((LENGTH(p.body) - LENGTH(REPLACE(p.body, 'term', '')))/4) + ((LENGTH(p.body) - LENGTH(REPLACE(p.body, 'search', '')))/6)) AS Occurrences FROM posts AS p GROUP BY p.id ORDER BY Occurrences DESC 

отредактировал свой пример, чтобы дать немного большей ясности

Вариации в вышеупомянутом запросе SQL, добавление операторов WHERE (WHERE p.body LIKE '% what% you% want) и т. Д., Вероятно, даст вам именно то, что вам нужно.

2. Вы можете изменить схему базы данных для поддержки полного текста. Часто то, что делается для сохранения ссылочной целостности InnoDB, соответствия ACID и скорости без необходимости установки плагинов, таких как Sphinx Fulltext Search Engine для MySQL, заключается в разделении данных котировки в собственную таблицу. В основном у вас будет таблица «Котировки», которая представляет собой таблицу InnoDB, которая вместо того, чтобы иметь поле данных «ТЕКСТ», имеет ссылку «quote_data_id», которая указывает на идентификатор в таблице Quote_Data, которая является таблицей MyISAM. Вы можете сделать полный текст в таблице MyISAM, присоединиться к идентификаторам, возвращаемым с помощью таблиц InnoDB, и получить ваши результаты.

3. Установите Sphinx . Удачи с этим.

Учитывая то, что вы описали, я бы настоятельно рекомендовал вам принять первый подход, который я представил, поскольку у вас есть простой сайт с базой данных. Первое решение прост, быстро выполняется работа. Lucene будет сукой для настройки, особенно если вы хотите интегрировать ее с базой данных, поскольку Lucene предназначена главным образом для индексирования файлов, а не баз данных. Пользовательский поиск по сайту Google просто заставляет ваш сайт потерять тонны репутации (заставляет вас выглядеть любительским и взломанным), а MySQL fulltext, скорее всего, приведет к изменению схемы базы данных.

Используйте Google Custom Site Search . Я слышал, что они кое-что знают о поиске.

Stackoverflow планирует использовать поисковую систему Lucene . Существует PHP-порт, написанный для Zend Framework, но может быть загружен как отдельный объект, не требующий всей навороты ZF. Это называется Zend_Search_Lucene, документация для которого вы можете найти здесь .

Ваш sql для этого будет выглядеть примерно так (где вы пытаетесь найти в нем цитаты с «индейкой»):

 SELECT * FROM Quotes WHERE the_quote LIKE "%turkeyt%"; 

Оттуда вы можете понять, что делать с тем, что он выплескивает на вас.

Будьте осторожны, чтобы правильно обрабатывать случаи, когда злоумышленник может вводить вредоносный SQL в вашу базу данных, особенно если вы планируете разместить это на www. Если вы делаете это ради удовольствия, я думаю, это просто то, что вы хотите узнать.

Если вы новичок в базах данных и sql, я рекомендую sqlite над mysql. Гораздо проще настроить и работать, как ни в коем случае. Это вызовет потенциальные головные боли, связанные с необходимостью установки и настройки mysql в первый раз.

Я бы пошел с полнотекстовым поиском, посмотрите здесь: http://hockinson.com/fulltext-search-of-mysql-database-table.html

Если вы хотите написать свой собственный, взгляните на реализацию phpBB. Они имеют две таблицы, первый – это уникальный список всех слов, которые появляются в записях, а второй – многозначная ссылка между словами и записями. Затем вы можете сделать группу и подсчитать, чтобы отсортировать записи так, как вы ищите.

Это намного больше, чем реализация сторонней поисковой системы (или полнотекстового поиска), но это позволит вам более эффективно контролировать результаты.

В качестве альтернативы Sphinx и Lucene, относительно простая поисковая система может быть создана с использованием библиотеки Xapian .

+ Поддерживает множество расширенных функций поиска (например, рейтинг релевантности)
+ Быстрый

- Вам нужно будет изучить API для создания вашего интерфейса
- Требуется установить расширение php

Также обратите внимание, что Xapian сохраняет свои данные в отдельном индексе для mysql.

Вы также можете быть заинтересованы в Forage, который является оберткой для Solr, Xapian и Lucene.

Люди Xapian также создали поисковую систему Omega, которая является интерфейсом к Xapian и может быть вызвана через cgi.

Google Custom Site Search замечательный, если вы его не запрашиваете (я думаю, вы получите 1k запросов / день бесплатно) или если вы готовы платить.

Полнотекстовый поиск MySQL также является отличным ресурсом (как уже упоминалось ранее).

Yahoo BOSS – это интригующий проект – я собираюсь дать ему шанс во время моего следующего поискового проекта.

И, наконец, Lucene – отличный ресурс, если вам нужна больше энергии, чем полный текст, но вы хотите настроить собственную поисковую систему. http://lucene.apache.org

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

Инструмент на базе Windows создает базу данных сайта, затем он также спрашивает, какой язык (PHP, ASP.NET, JavaScript и т. Д.) Вы хотите использовать. Я выбрал PHP и создал для меня PHP-код. Все, что я должен был сделать, это загрузить файлы на сервер и (опционально) настроить шаблон, и поиск по сайту работал.

Это бесплатно для небольших сайтов, и единственное, что я могу найти, это то, что инструмент Spider (построитель базы данных) должен запускаться в Windows.