zoukankan      html  css  js  c++  java
  • SharePoint 2010 通配符搜索

    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的基础上也支持前缀搜索。

  • 相关阅读:
    SpringBoot启动报错 java.lang.NoClassDefFoundError: javax/validation/ValidationException
    Java String类创建对象问题
    Java代码执行顺序
    Java抽象类与接口(2) ------接口
    Java抽象类与接口(1) ------抽象类
    Manjaro kde2020 使用记录
    生活常用小插件
    技术汇总
    Vue中使用websocket的正确使用方法
    js封装一个websocket
  • 原文地址:https://www.cnblogs.com/splover/p/2130923.html
Copyright © 2011-2022 走看看