当前位置:  开发笔记 > 编程语言 > 正文

是否可以使用LINQ的全文搜索(FTS)?

如何解决《是否可以使用LINQ的全文搜索(FTS)?》经验,为你挑选了5个好方法。

我想知道是否可以使用.NET Framework 3.5将FTS与LINQ一起使用.我正在搜索我没有找到任何有用的文档.

有没有人有这方面的经验?



1> John..:

是.但是你必须首先创建SQL服务器函数并默认调用它,LINQ将使用类似的.

这篇博文将解释细节,但这是摘录:

为了使它工作,您需要创建一个表值函数,它只根据您传入的关键字执行CONTAINSTABLE查询,

create function udf_sessionSearch
      (@keywords nvarchar(4000))
returns table
as
  return (select [SessionId],[rank]
            from containstable(Session,(description,title),@keywords))

然后将此函数添加到LINQ 2 SQL模型中,并且他现在可以编写类似的查询.

    var sessList = from s   in DB.Sessions
                   join fts in DB.udf_sessionSearch(SearchText) 
                   on s.sessionId equals fts.SessionId
                 select s;



2> Gabriel Isen..:

否.LINQ To SQL不支持全文搜索.

也就是说,您可以使用利用FTS的存储过程并让LINQ To SQL查询从中获取数据.



3> Glenn Slaven..:

我不相信.您可以在字段上使用"包含",但它只会生成LIKE查询.如果你想使用全文,我建议使用存储过程来执行查询,然后将其传递回LINQ



4> Victor Gelmu..:

如果您不想创建联接并希望简化C#代码,则可以创建SQL函数并在"from"子句中使用它:

CREATE FUNCTION ad_Search
(
      @keyword nvarchar(4000)
)
RETURNS TABLE
AS
RETURN
(
      select * from Ad where 
      (CONTAINS(Description, @keyword) OR CONTAINS(Title, @keyword))
)

更新DBML后,在linq中使用它:

string searchKeyword = "word and subword";
var result = from ad in context.ad_Search(searchKeyword)
                 select ad;

这将生成如下的简单SQL:

SELECT [t0].ID, [t0].Title, [t0].Description
FROM [dbo].[ad_Search](@p0) AS [t0]

从ad_Search函数实现中可以看到,这可以通过多个列进行搜索.



5> 小智..:

不,全文搜索是SQL Server特有的功能(在其中,文字是通过单词索引的,查询要遍历此索引而不是遍历字符数组)。Linq不支持此功能,任何.Contains()调用都会访问非托管字符串函数,但不会从索引中受益。

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有