Пока мы полностью не выясним нашу стратегию полнотекстового поиска, мы придумали разумное решение, чтобы показать нашим владельцам бизнеса, как функционал будет работать. С учетом вышесказанного мы используем Entity Framework 4.1 и первый подход к коду. Мы создали хранимую процедуру для получения результатов в стандартном формате. Вот пример класса результатов поиска:
public class SearchResult
{
public Guid EntityId {get;set;}
public string DisplayText {get;set;}
public string Icon {get;set;}
}
Теперь никакие данные не попадут в таблицу для SearchResults. Идея в том, что мы будем искать несколько объектов и строить результаты, используя эту структуру.
SP выглядит примерно так:
CREATE PROCEDURE dbo.Search(
@term varchar(200),
@topSelect int = 5,
@isPrefix BIT = 0,
)
AS
BEGIN
Declare @SearchTerm varchar(250)
If (isNull(@isPrefix,0) = 0)
begin
Set @SearchTerm = '%' + @term + '%'
end
Else
begin
Set @SearchTerm = @term + '%'
end
select top (@topSelect) 'Project' as 'Controller',
[Id],
Name as 'DisplayText',
'PROJECTICON' as Icon
from Projects
where Name like @SearchTerm
UNION
select top (@topSelect) 'Rfi' as 'Controller',
[Id],
[Number] + ' - ' + [Number] as 'DisplayText',
'RFIICON' as Icon
from Rfis
where (Subject like @SearchTerm or
Description like @SearchTerm or
Number like @SearchTerm)
End
Могу ли я вызвать хранимую процедуру с EF и заполнить "сущность" SearchResult результатами SP или мне нужно сделать это без EF?
Идея та же, что и при использовании индекса, но мы ищем данные в реальном времени. Опять же, это временное решение для наших нужд, пока мы не уточним, какое решение FTS мы хотим использовать.
Обновление:
После некоторого исследования я думаю, что это может быть поведение ... Я сообщу.