LinqToSql и полнотекстовый поиск - это можно сделать? - PullRequest
5 голосов
/ 16 сентября 2008

Кто-нибудь придумал хороший способ выполнения полнотекстового поиска (FREETEXT() CONTAINS()) для любого числа произвольных ключевых слов, используя стандартный синтаксис запроса LinqToSql?

Я бы, очевидно, хотел бы избежать использования хранимого процесса или генерации вызовов динамического SQL.

Очевидно, я мог бы просто вставить строку поиска по параметру в SPROC, который использует FREETEXT () или CONTAINS (), но я надеялся быть более креативным с поиском и создавать запросы, такие как:

"пепперони пицца" и бургер, а не "яблочный пирог".

Сумасшедший, я знаю - но разве не было бы здорово сделать это напрямую из LinqToSql? Любые советы о том, как этого добиться, будут высоко оценены.

Обновление: я думаю, что я могу кое-что здесь ...

Также: я откатил изменение, внесенное в заголовок моего вопроса, потому что оно фактически изменило смысл того, что я спрашивал. Я знаю , что полнотекстовый поиск не поддерживается в LinqToSql - я бы задал этот вопрос, если бы хотел знать это. Вместо этого - я обновил свой заголовок, чтобы успокоить массы с правкой при нажатии на триггер.

Ответы [ 2 ]

5 голосов
/ 12 декабря 2008

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

string q = query.Query;
IQueryable<Story> stories = ActiveStories
                        .Join(tvf_SearchStories(q), o => o.StoryId, i => i.StoryId, (o,i) => o)
                        .Where (s => (query.CategoryIds.Contains(s.CategoryId)) &&
                                    /* time frame filter */
                                (s.PostedOn >= (query.Start ?? SqlDateTime.MinValue.Value)) &&
                                (s.PostedOn <= (query.End ?? SqlDateTime.MaxValue.Value)));

Здесь tvf_SearchStories - это табличная функция, которая внутренне использует полнотекстовый поиск

4 голосов
/ 16 сентября 2008

К сожалению, LINQ to SQL не поддерживает полнотекстовый поиск.

Существует множество продуктов, которые, я думаю, могут: Lucene.NET, NHibernate Search. LINQ для NHibernate в сочетании с поиском NHibernate, вероятно, даст эту функциональность, но оба они все еще глубоко в бета-версии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...