Поисковая система, asp.net mvc, Дизайн, управляемый доменом - PullRequest
1 голос
/ 27 марта 2009

Собираюсь развивать поисковик.

Мне интересно, как должен выглядеть мой DDD. Должна быть реализована сортировка записей, но я не хочу, чтобы мои представления знали о структуре моей базы данных (по каким столбцам сортировать). Насколько я понимаю, сортировка информации должна исходить от уровня инфраструктуры, от реализации репозитория, поэтому должен быть гибкий домен.

Как это должно выглядеть?

Я хочу, чтобы это было строго напечатано.

Есть ли лучшие практики?

Рекомендации по архитектуре?

Ответы [ 2 ]

1 голос
/ 27 марта 2009

Если вы собираетесь развивать поисковую систему, вам придется очень быстро задуматься о масштабируемости. Сортировка в поисковых средах - знакомая проблема. Вы должны взглянуть на реализации поиска от Google! Способ сортировки должен зависеть от алгоритма ранжирования . Разработка алгоритма ранжирования, ориентированного на домен, не должна отличаться от ранжирования как сервисного подхода

Какой язык вы используете, ваш выбор. Если вы выберете C / C ++ Интерфейс передачи сообщений (MPI) для распределенных вычислений. Если вы используете Java, взгляните на JMS и GridGain (GridGain реализует Googles MapReduce).

Другой вопрос, как хранить ваши данные (распределенные, быстрые, отказоустойчивые)! Для Java взгляните на Project Voldemord (это одна из лучших систем, которую вы можете получить бесплатно.

Подробнее об архитектуре Google читайте на веб-сайте с высокой масштабируемостью .

По вопросам DDD загляните на dddcommunity.org , домашнюю страницу самого Эрика Эванса;) Он написал очень хорошую Книгу Доменно-управляемый дизайн . С DDD все в порядке, потому что он обеспечивает целостность домена.

Простая модель может быть:

page ( URL url, BigInt rank, List<String> keywords, 
       List<URL> links, List<URL> outLinks, Content ref) 


content ( GzippedBytes[] content )

Если в систему добавляется новый узел, он должен реагировать на такие вещи, как « setLinks » и т. Д., Чтобы он мог получить свой PageRank самостоятельно.

Клиент довольно прост, он выполняет только поиск (ключевые слова) , который сортируется по PageRank.

Вот сервис пример реализации PageRank в Java.

0 голосов
/ 04 июня 2013

Вот основы пользовательской поисковой системы, которая анализирует каталоги MVC View, читает файлы и сопоставляет предоставленный текст с регулярным выражением. Мой сайт возвращает HTML-ссылки результатов поиска. Этот код приведет к созданию списка.

List<string> results = new List<string>();
DirectoryInfo di = new DirectoryInfo  (System.Configuration.ConfigurationManager.AppSettings["PathToSearchableViews"]);
//get all view directories except the shared
foreach (DirectoryInfo d in di.GetDirectories().Where(d=>d.Name != "Shared"))
{
    //get all the .cshtml files
    foreach (FileInfo fi in d.GetFiles().Where(e=>e.Extension  == ".cshtml"))
    {
    //check if cshtml file and exclude partial pages
    if (fi.Name.Substring(0,1) != "_")
    {
        MatchCollection matches;
        bool foundMatch = false;
        int matchCount = 0;
        using (StreamReader sr = new StreamReader(fi.FullName))
        {
            string file = sr.ReadToEnd();
            foreach (string word in terms)
            {
                Regex exp = new Regex("(?i)" + word.Trim() + "(?-i)");
                matches = exp.Matches(file);
                if (matches.Count > 0)
                {
                    foundMatch = true;
                    matchCount = matches.Count;
                }
            }
         //check match count and create links
         //
         //
         }
      }
      }
  }
  return results;
...