php, mysql поиск по сайту - PullRequest
       7

php, mysql поиск по сайту

1 голос
/ 30 ноября 2010

Мне нужен поисковик для сайта, который я создаю. Я решил попробовать свои силы, используя php и mysql. В настоящее время похоже, что жизнеспособными вариантами является создание трех таблиц.

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

В конце, когда выполняется поиск. Скрипт должен возвращать страницы с наиболее проиндексированными словами для данного слова.

Однако, похоже, что этот подход может возвращать результаты только в зависимости от количества ключевых слов. Чем больше ключевое слово используется в статье, тем выше оно будет отображаться на странице результатов. Таким образом, статья с меньшим количеством ключевых слов может быть больше связана с поиском, но будет помещена ниже в результаты.

Вопрос будет в том, есть ли лучший способ создать пользовательскую поисковую систему с использованием php / mysql? Кроме того, если у вас нет доступа к серверу для установки поисковых систем, таких как Sphinx, как лучше всего решить эту проблему?

Ответы [ 4 ]

2 голосов
/ 30 ноября 2010

Я построил поисковую систему почти таким же образом, но я создал перекрестную таблицу, связывающую каждое слово с каждой страницей, на которой оно встречалось.В этой таблице я также сохранил количество раз, когда слово появлялось на странице по отношению к длине страницы.Я подсчитал, если хотите, процент слов на странице, которые были этим словом.Это облегчает применение веса к вашему результату поиска.Но, к сожалению, сложно определить, является ли страница более релевантной другими способами.Google использует некоторые приемы, такие как расстояние между двумя ключевыми словами на странице.Если они близки друг к другу, они, вероятно, связаны.Если ключевое слово выше на странице, это, вероятно, более важно, и так далее.

Но Google также использует совершенно другую структуру базы данных, которая лучше построена для такого рода запросов.Это может быть трудно встроить в MySQL.

Вы можете попробовать, поможет ли индексация MySQL в FullText.Он индексирует ваши страницы, и вы можете делать запросы, используя MATCH, который возвращает оценку для каждой строки.Я не знаю точно, какие формулы здесь используются, но это кажется довольно умным.

Если все ваши страницы общедоступны, вы можете рассмотреть возможность использования пользовательского поиска Google или чего-то подобного.Это сэкономит вам много времени.

1 голос
/ 30 ноября 2010

Как и предлагали другие, не катайте свои собственные;SQL не годится для поиска.Мы используем систему на основе Solr с использованием клиентской библиотеки Solr PHP.Вы получите гораздо лучшую производительность, поддержку гораздо более мощных логических запросов (например, это И это И (это ИЛИ) и т. Д.), Поиск в документах (например, PDF, Word, XLS и т. Д.) Через Tika и т.

Если вы хотите сканировать свой собственный веб-сайт, вы также можете заглянуть в орех.1013 *http://nutch.apache.org/

0 голосов
/ 30 ноября 2010

Я второй Эль Йобо, если вы ищете полноценную поисковую систему, вам больше повезет с клиентами lucene, но если вы ищете быстрое решение, google cse - лучший.

0 голосов
/ 30 ноября 2010

Не тратьте свое время, зайдите на пользовательский поиск Google http://www.google.com/cse/

...