2013-06-12 3 views
2

Я пытаюсь создать поисковую систему для своего сайта. Как мне создать таблицу, в которой хранится список индексированных слов.Структура базы данных базы данных для поисковой системы для моего сайта

Раньше я думал, что-то вроде этого:

Таблица: tbl_indexedwords имеет 2 колонки iw_wordid и iw_word.

Таблица: tbl_wordoccurrence 4 колонки wo_occurrenceid, wo_wordid, wo_pageid, wo_numberofoccurrences.

Теперь этот дизайн не будет работать, если пользователь вводит более двух слов в поле поиска. Предположим, что foo bar. Даже если foo и bar оба присутствуют в таблице tbl_indexedwords, а соответствующие данные указаны в tbl_wordoccurrence, мой сценарий поисковой системы оценит результаты, когда он видит максимум wo_numberofoccurrences для foo или bar. Он не увидит, находятся ли foo и bar рядом друг с другом, так как нет никакой колонки для порядка появления слов. Надеюсь, я понимаю, что я говорю здесь.

Другой идеей может быть создание таблицы tbl_wordoccurrence из 3 столбцов. Забудьте о wo_numberofoccurences и сохраните каждое слово на странице с уникальным wo_occurrenceid. Теперь это решит мою проблему, поскольку я знаю порядок появления слов. если wo_occurrenceid какого-то слова wo_occurrenceid +1 или wo_occurrenceid -1 какого-то другого слова, то эти два происходят бок о бок.

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

+0

Я бы предложил использовать функцию FULLTEXT вашей системы баз данных (если она предусмотрена) или использовать некоторые готовые фреймворки, такие как ** [Lucene] (http://lucene.apache.org/core/) **, которые достаточно зрелы, чтобы эффективно выполнять свое требование, а не самостоятельно изобретать колесо. –

+0

@RumitParakhiya Работает ли Lucene с php? Я думал, что это для Java! –

+0

У меня действительно нет большой идеи об использовании Lucene с php, но [this SO Question] (http://stackoverflow.com/questions/2010663/lucene-with-php) или [эта ссылка] (http: // lucene.apache.org/solr/) может вам помочь. –

ответ

3

Если содержимое вашего сайта находится в базе данных (я полагаю), создание отдельной таблицы даже не понадобилось бы, если вы используете индекс FULLTEXT. Если вы используете mySQL, то он имеет такую ​​возможность, см. Примеры here и here. И если вы используете MSSQL он также имеет свои собственные возможности FULLTEXT индексирования как пример here и here

И если вы настаиваете если иметь отдельную таблицу для поиска, то вы могли бы, скорее всего, только одна таблице нужны, как:

Table : tbl_wordsoccurrence 
Fields : words_id, words 
(and if you like you can include also number_of_occurences and page_id fields) 

В таблице выше вы можете либо сохранить одно слово, например programming, либо такие фразы, как php programming.

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

+0

Спасибо. Я не знал об этом :) –

Смежные вопросы