Приложение .NET — проблема с поиском

У меня есть веб-приложение ASP.NET и List<Product> на сервере (в магазине Application[]). Продукт класса имеет свойство Name. Мне нужно дать пользователям возможность искать товары по названиям. Например, если пользователь вводит «компьютер Honda», приложение должно отобразить «Компьютер двигателя Honda Passport 2001 (OEM)». Поиск должен быть очень быстрым, в будущем я добавлю функцию автозаполнения (AJAX).

До сих пор у меня было несколько идей, как решить эту проблему:

  1. Напишите или используйте реализацию с открытым исходным кодом чего-то вроде B-Tree, Trie, Suffix tree, Prefix tree. К сожалению, структуры данных и алгоритмы — не самый сильный мой навык (чертов Гарвард, столько денег впустую).

  2. Используйте поисковую систему — Lucene.NET, Velocity или MemCached.NET. Никогда не использовал их, поэтому я не знаю, будут ли они работать в этом сценарии. Мне не нужно искать синонимы, и у моего приложения нет разрешений на доступ к файловой системе (поэтому нет индексного файла).

Любые советы приветствуются.


person Fred Austin    schedule 24.11.2010    source источник


Ответы (2)


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

Хотя это правда, что их может быть сложно реализовать, вы, возможно, уже сможете найти один, написанный для .NET. Однако, поскольку они, как правило, очень полезны, вы можете найти несколько хороших материалов с информацией о том, как написать свой собственный.

person rjzii    schedule 24.11.2010

Сохраняются ли эти продукты в базе данных в какой-либо момент? Многие популярные базы данных (включая Microsoft SQL Server) поддерживают индексирование с произвольным текстовым поиском, что является быстрым способом текстового поиска в больших наборах данных.

person Macy Abbey    schedule 24.11.2010
comment
Не могу этого сделать, БД вне моего контроля. Я должен загрузить каталог продуктов в память при запуске приложения. - person Fred Austin; 24.11.2010
comment
Ну, определенно не делайте свою собственную реализацию алгоритмов, которые вы упомянули выше. Вы пробовали что-то подобное? codedigest.com/CodeDigest/ - person Macy Abbey; 24.11.2010