Как я реализовал бы простой поиск сайта с php и MySQL?

WHERE внутри вставки не вызывает никакого смысла.

Если вы хотите добавить новую строку в свою базу данных, вам не понадобится предложение WHERE, поскольку нет существующего строка, на которую вы можете ссылаться.

Если вы хотите обновить существующую строку, вам не следует использовать оператор INSERT, но оператор UPDATE.

15
задан stalepretzel 22 December 2008 в 18:05
поделиться

9 ответов

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

, Таким образом, у Вас есть несколько опций:

1. самый простой подход обрисован в общих чертах Дерево Частицы . Можно на самом деле получить оцениваемые поиски от чистого SQL (никакой fulltext, нет ничто). 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-запрос, добавив, ГДЕ операторы (ГДЕ p.body КАК '%whatever%you%want'), и т.д. вероятно, получат Вас точно, в чем Вы нуждаетесь.

2. можно изменить схему базы данных для поддержки полного текста. Часто, что сделано для хранения ссылочной целостности InnoDB, соответствия ACID и скорости, не имея необходимость устанавливать плагины как , Механизм Полнотекстового поиска Сфинкса для MySQL должен разделить данные кавычки на свою собственную таблицу. В основном у Вас была бы таблица Quotes, которая является таблицей InnoDB, что, вместо того, чтобы иметь Ваше Текстовое поле "данные" у Вас есть ссылка "quote_data_id", который указывает на идентификатор на таблице Quote_Data, которая является таблицей MyISAM. Можно сделать fulltext на таблице MyISAM, присоединиться к идентификаторам, возвращенным с таблицами InnoDB, и вуаля у Вас есть свои результаты.

3. Установка Сфинкс . Удача с этим.

Данный, что Вы описали, я буду ВЫСОКО , рекомендуют проявить 1-й подход, который я представил, так как у Вас есть простая база данных управляемый сайт. 1-е решение просто, сделали задание быстро. Lucene будет сукой для установки особенно, если Вы захотите интегрировать его с базой данных, поскольку Lucene разработан главным образом к индексным файлам не базы данных. Google пользовательский поиск сайта просто заставляет Ваш сайт потерять тонны репутации (заставляет Вас выглядеть дилетантскими и взломанными), и MySQL fulltext, скорее всего, заставят Вас изменять свою схему базы данных.

34
ответ дан 1 December 2019 в 00:30
поделиться

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

5
ответ дан 1 December 2019 в 00:30
поделиться

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

3
ответ дан 1 December 2019 в 00:30
поделиться

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

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

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

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

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

2
ответ дан 1 December 2019 в 00:30
поделиться

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

1
ответ дан 1 December 2019 в 00:30
поделиться

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

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

1
ответ дан 1 December 2019 в 00:30
поделиться

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

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

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

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

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

люди Xapian также создали поисковую систему Омеги, которая является frontend к Xapian и может быть названа через cgi.

1
ответ дан 1 December 2019 в 00:30
поделиться

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

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

БОСС Yahoo является интригующим проектом - я собираюсь дать ему выстрел во время своего следующего поискового проекта.

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

0
ответ дан 1 December 2019 в 00:30
поделиться

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

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

Это бесплатно для небольших сайтов,

0
ответ дан 1 December 2019 в 00:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: