文档章节

利用Sharepoint2010进行全文搜索的一个Demo

呗道crow
 呗道crow
发布于 2014/06/25 18:19
字数 505
阅读 27
收藏 0

注意:要注释掉一些没必要的代码。

public class SharepointSearch
    {
        public static DataTable Search(List<string> column, List<string> scope, string searchWords, IndexServiceSearchOption searchOption)
        {
            try
            {
                QueryWebServiceProxy.QueryService queryService = new QueryWebServiceProxy.QueryService();
                queryService.Url = APJ.Util.Utility.GetAppSetting("SharepointServer");
                
                //queryService.Credentials = System.Net.CredentialCache.DefaultCredentials;
                queryService.Credentials = new System.Net.NetworkCredential("姓名", "密码", "域");
                
                System.Data.DataSet queryResults = queryService.QueryEx(BuildQueryText(column, scope, searchWords, searchOption));
                DataTable indexResult = queryResults.Tables[0];
                string rootPath = APJ.Util.Utility.GetAppSetting("SaveFilePath").Trim().ToLower();
                for (int i = 0; i < indexResult.Rows.Count; i++)
                {
                    indexResult.Rows[i][0] = indexResult.Rows[i][0].ToString().Replace("/", "\\");
                    indexResult.Rows[i][0] = indexResult.Rows[i][0].ToString().Replace("file:" + rootPath, "");
                }
                
                //add by zjy 20140620, log sharepoint service infomation
                StringBuilder msg = new StringBuilder();
                msg.Append("Sharepoint Serch Log\n");
                string scopes = "";
                foreach (string s in scope)
                {
                    scopes += s + "|";
                }
                msg.Append(string.Format("RootPath:{0} , SharepointServer:{1} , Scope:{2} , Keywords:{3} \n", rootPath, "url", scopes, searchWords));
                msg.Append(string.Format("Result count:{0}\n", indexResult.Rows.Count));
                msg.Append("Result count:\n");
                for (int x = 0; x < indexResult.Rows.Count; x++)
                {
                    msg.Append(indexResult.Rows[x][0] + "\n");
                }
                APJ.Util.Log.WindowLog.Log(msg.ToString(), APJ.Util.Log.LogType.Message, "SysLog");
                return indexResult;
            }
            catch (Exception ex)
            {
                DataTable dt = new DataTable();
                return dt;
            }
        }
        private static string ParseKeywords(string keyWords, IndexServiceSearchOption searchOption)
        {
            string[] strArray = keyWords.Split((char[])new char[] { ' ' }, System.StringSplitOptions.RemoveEmptyEntries);
            if (searchOption.Equals(IndexServiceSearchOption.And))
            {
                return "FREETEXT(DEFAULTPROPERTIES,\'" + keyWords + "\')";
            }
            else if (searchOption.Equals(IndexServiceSearchOption.Or))
            {
                for (int i = 0; i < strArray.Length; i = (int)(i + 1))
                {
                    strArray[i] = "FREETEXT(DEFAULTPROPERTIES,\'" + strArray[i] + "\')";
                }
                string str = " Or ";
                return string.Join(str, strArray);
            }
            else
            {
                return "FREETEXT(DEFAULTPROPERTIES,\'" + keyWords + "\')";
            }
        }
        private static string ParseColumn(List<string> column)
        {
            //Join Column  as: Column1 , Column2...
            //if  the column.count <1 ,then select   all  column
            string returnParseColumn = string.Empty;
            StringBuilder queryColumn = new StringBuilder(250);
            if (column == null || column.Count < 1)
            {
                queryColumn.Append("Title, Rank, Size, Description, Write, Path");
                returnParseColumn = queryColumn.ToString();
            }
            else
            {
                foreach (string _column in column)
                {
                    queryColumn.Append(_column + ",");
                }
                if (queryColumn.Length > 1)
                    returnParseColumn = queryColumn.ToString().Substring(0, queryColumn.ToString().Length - 1);
            }
            return returnParseColumn;
        }
        private static string ParseScope(List<string> scope)
        {
            //Join Scope  as:    CONTAINS(Path,Scope1) or CONTAINS(Path,Scope2)...
            string queryScope = string.Empty;
            if (scope != null && scope.Count > 0)
            {
                string[] queryScopeArray = new string[scope.Count];
                for (int i = 0; i < scope.Count; i++)
                {
                    queryScopeArray[i] = "CONTAINS(Path,\'" + scope[i] + "\')";
                }
                queryScope = string.Join(" or ", queryScopeArray);
            }
            return queryScope;
        }
        private static string BuildQueryText(List<string> column, List<string> scope, string searchWords, IndexServiceSearchOption searchOption)
        {
            string queryColumn = ParseColumn(column);
            string queryScope = ParseScope(scope);
            string queryKeyWord = ParseKeywords(searchWords, searchOption);
            
            //Title, Rank, Size, Description, Write, Path
            //type='MSSQLFT'
            StringBuilder queryText = new StringBuilder(200);
            queryText.Append("<QueryPacket xmlns='urn:Microsoft.Search.Query' Revision='1000'>");
            queryText.Append("<Query>");
            queryText.Append(" <SupportedFormats>");
            queryText.Append(" <Format revision='1'> urn:Microsoft.Search.Response.Document:Document");
            queryText.Append(" </Format> ");
            queryText.Append(" </SupportedFormats>");
            queryText.Append(@"  <Range>
                                 <StartAt>1</StartAt>
                                 <Count>100</Count>
                                 </Range> ");
            queryText.Append("<Context>");
            queryText.Append("<QueryText language='en-US' type='MSSQLFT'>");
            queryText.Append(" SELECT ");
            queryText.Append(queryColumn);
            queryText.Append(" FROM scope() ");
            queryText.Append(" WHERE  ");
            queryText.Append(" (" + queryKeyWord + ")");
            if (!string.IsNullOrEmpty(queryScope))
                queryText.Append(" AND  (" + queryScope + ")");
            queryText.Append(" ORDER BY \"Rank\" DESC");
            queryText.Append("</QueryText>");
            queryText.Append("</Context>");
            queryText.Append("</Query>");
            queryText.Append("</QueryPacket>");
            return queryText.ToString();
        }
        public enum IndexServiceSearchOption
        {
            And,
            Or
        }
    }


© 著作权归作者所有

呗道crow
粉丝 0
博文 4
码字总数 2878
作品 0
珠海
私信 提问
sharepoint2007就地升级2010系列(一)2007概览

大家可能熟悉了sharepoint2010,熟悉了sharepoint2013,做了N多个项目,但是有没有做过从sharepoint2007升级或者迁移到sharepoint2010的项目呢?我们做实验的时候,可能更多的是直接安装新的...

科技小能手
2017/11/12
0
0
sharepoint2007就地升级2010系列(五)升级到sharepoint2010

大家下午好 今天我们来完成最后一步,sharepoint2007升级2010。其实我反倒没有那么紧张了,因为我最担心的数据库升级,已经过了。 OK,话不多说,让我们直接开始吧。 首先,我们先将所有sha...

科技小能手
2017/11/12
0
0
Windows server 2008 R2 安装sharepoint2010

sharepoint2010最佳的系统平台是Windows server 2008R2,今天我们就在08R2上,安装一次sharepoint2010~ Come on~搞起 1.打开服务器管理器 2.选择Web服务服务器及应用服务器 3.添加相应角色 ...

科技小能手
2017/11/12
0
0
搜索引擎选型调研文档

Elasticsearch简介* Elasticsearch是一个实时的分布式搜索和分析引擎。它可以帮助你用前所未有的速度去处理大规模数据。 它可以用于全文搜索,结构化搜索以及分析,当然你也可以将这三者进行...

看看这天
2016/04/05
74
0
Elasticsearch与Solr

搜索引擎选择: Elasticsearch与Solr 搜索引擎选型调研文档 Elasticsearch简介* Elasticsearch是一个实时的分布式搜索和分析引擎。它可以帮助你用前所未有的速度去处理大规模数据。 它可以用...

zhangfei_kr
2016/02/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

堆”和“栈

C++作为一款C语言的升级版本,具有非常强大的功能。它不但能够支持各种程序设计风格,而且还具有C语言的所有功能。我们在这里为大家介绍的是其中一个比较重要的内容,C++内存区域的基本介绍。...

SibylY
32分钟前
3
0
总结:Https

一、介绍 简单理解,https即在http协议的基础上,增加了SSL协议,保障数据传输的安全性。 它由以前的http—–>tcp,改为http——>SSL—–>tcp;https采用了共享密钥加密+公开密钥加密的方式 ...

浮躁的码农
34分钟前
4
0
数据库表与表之间的一对一、一对多、多对多关系

表1 foreign key 表2 多对一:表 1 的多条记录对应表 2 的一条记录 利用foreign key的原理我们可以制作两张表的多对多,一对一关系 多对多: 表1的多条记录可以对应表2的一条记录 表2的多条记...

Garphy
今天
7
0
MySQL 表崩溃修复

MySQL日志报错 2019-10-19 13:41:51 19916 [ERROR] /usr/local/mysql/bin/mysqld: Table './initread_hss/user_info' is marked as crashed and should be repaired2019-10-19 13:41:51 1......

雁南飞丶
今天
6
0
Error和Exception

1.Error类和Exception类都是继承Throwable类 2.Error(错误)是系统中的错误,程序员是不能改变的和处理的,是在程序编译时出现的错误,只能通过修改程序才能修正。一般是指与虚拟机相关的问...

大瑞清_liurq
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部