2013-09-25 5 views
1

Привет, я должен создать внутреннюю поисковую систему на моем сайте .cshtml.Как создать внутреннюю поисковую систему для объектов

Двигатель будет искать список объектов. И он вернет список, основанный на критериях поиска.

Возвращаемый список упорядочивается тем, сколько раз слова поиска находятся в объекте, и если оно находится в заголовке объекта.

Объект имеет header и content, которые будут найдены. Оба являются строками.

Мой вопрос в том, как это сделать наиболее эффективным способом, потому что я думаю о множестве циклов и временных списков. Но для этого потребуется много времени ответа. Было бы лучше с бинарным поиском и как? Или, если есть приложение, уже имеющееся там, которое может это сделать, и это позволяет мне самостоятельно составлять вывод.

PS: Все объекты из базы данных, если это помогает.

+1

Простые свойства строки 'header' и' content'? – Corak

+1

Если вас беспокоит производительность, это лучше всего сделать в базе данных. SQL Server имеет компонент полнотекстового поиска, который упрощает работу. –

+1

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

ответ

2

Я не привык к бритве, ни ASP.net, но в C# со списком объектов, это может быть сделано давая вес для каждого объекта, основываясь на вашем searchpattern и упорядочить список по весу:

var searchPattern = "word1|word2"; 
var regex = new Regex(searchPattern); 
var search = list.Select(o => 
         new { Weight = regex.Matches(o.Header).Count * 20 
            + regex.Matches(o.Content).Count * 10, 
           Value = o}) 
        .OrderByDescending(o => o.Weight); 

Это может быть перезаписано как sql-запрос, если у вас есть объекты в базе данных, кажется, что SQL-сервер LIKE поддерживает выражения регулярных выражений.

+0

Как бы sql выглядел так, как –

+0

Я пробовал это, но я получаю все объекты в, что кажется случайным порядком. Но что, если я хочу только показать список объектов, у которых есть слова из моего поиска? –

+1

Мне не хватает proefficient с sql, но я попытаюсь создать запрос. Если вы хотите, чтобы вы показывали только те объекты, у которых есть слова, добавьте .Where (o => o.Weight> 0) – Blau

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