您的位置:首页 > 其它

SharePoint 2010 通配符搜索

2011-08-08 14:19 555 查看
SharePoint 2010 提供了很强大的搜索功能,你可以通过很简单的配置就可以使用强大的搜索功能,还包括强大的wildcard 搜索,唯一遗憾的时SharePoint 2010 不支持前缀的wildcard 搜索。

我们先来体验下后缀的Wildcard 搜索,如果你想搜索所有包含Share相关的文档, 直接输入Share*,就能搜索到SharePoint, Shared等匹配的内容。



但是你不可以输入*Point来搜索SharePoint。有什么办法可以可以让SharePoint 支持suffix wildcard 搜索吗?

我们先来看看第一种方法:搜索Content Database,这个方法有自己的优点和局限性

优点:我们可以任意写我们的query语句,SQL 能做的,我们都能做。

缺点:只能在一个内容数据库进行搜索,也就是说,搜索的范围不能超越网站集(site Collection),另外微软并不建议直接操作数据库。

首先创建一个Search webpart,核心代码比较简单,关键是你如何处理UI, 让它看起来跟SharePoint 搜索基本相似。

public partial class SearchFilesUserControl : UserControl
{
DataTable results = new DataTable();
string conn = "Data Source=database Server; Initial Catalog={0}; Integrated Security=True;";
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string query = HttpContext.Current.Request.QueryString["K"] != null ? HttpContext.Current.Request.QueryString["K"].ToString() : "";

string[] querys = query.Trim().Split(' ');

string contentDB = string.Empty;
if (SPContext.Current != null)
{
contentDB = SPContext.Current.Site.ContentDatabase.Name;
}
else
{
// build your site
}
conn = string.Format(conn, contentDB);

DataTable dt = QuickGetTable(conn, querys);
searchResult.DataSource = dt;
searchResult.DataBind();
}

}

public DataTable QuickGetTable(string connectionStr, string[] keys)
{

try
{
SPSecurity.RunWithElevatedPrivileges(
delegate()
{
using (SqlConnection conn = new SqlConnection(connectionStr))
{
conn.Open();
SqlCommand command = new SqlCommand(ConfigurationManager.AppSettings["sqlQueryString"], conn);

SqlDataAdapter adapter = new SqlDataAdapter(command);

adapter.Fill(results);
conn.Close();
}
});
}
catch (Exception ex)
{
throw ex;
}
return results;
}

protected void searchResult_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
GridViewRow row = e.Row;
DataRowView rowView = (DataRowView)row.DataItem;
byte[] bDesp =(byte[]) rowView["Filedesp"];

string desp = System.Text.Encoding.Default.GetString(bDesp);

HtmlGenericControl fileDescription = (HtmlGenericControl)row.FindControl("fileDesp");
fileDescription.InnerText = desp.Substring(0, 20);

}
}
}
    


以上代码很简单,只需要简单解释一下两处:

1. string query = HttpContext.Current.Request.QueryString["K"] != null
? HttpContext.Current.Request.QueryString["K"].ToString() : "";

这段代码用来获得我们搜索的关键字,

2. SPSecurity.RunWithElevatedPrivileges(

delegate()

{});

我们把读取数据库内容的代码放在RunWithElevatedPrivileges内部,这样我们就不用去关心用户没有权限去读取数据库内容的问题。

然后创建一个页面,加入我们的web
part,并在SharePoint 搜索设置的页面设置为我们创建的页面就可以了。

开发起来比较简单,关键的部分是如果构建自己的SQL 查询语句和如果显示查询结果, 限制也很多毕竟微软不建议直接操作数据库,这里只是提供一中search的解决方案。

下一篇我们了解如果在SharePoint
search的基础上也支持前缀搜索。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: