カスタム開発SharePointの検索機能

概要

  SharePoint 2007の検索機能を改善するために、我々は自社開発の検索機能の定義を検索する必要があり、顧客の要件は、調査や研究を倍増し、我々は見当違いとしてSharePointリストのカスタムフィールドの条件を使用する必要があるため、SharePointでは、次の2つの方法のKeywordSearchQueryとFullTextSearchQueryを使用しましたので、開発するFullTextSearchQueryの使用。

 

デザイン

次のコンポーネントを使用するようにSharePoint 2007の二次開発を行うFullTextSearchQuery:

using Microsoft.Office.Server;
using Microsoft.Office.Server.Search;
using Microsoft.Office.Server.Search.Query;

 

 

SharePoint 2007のでは、我々は)(以下スコープを持っています:

画像

 

デフォルトの人々とすべてのサイトが2つのスコープを持っています。私たちは、すべてのサイトを示しています。

 

フローチャートクローラ(理解ソーススコープ()コンテンツの容易さ)にSharePointコンテンツソース

2

 

 

以下は、チェックするためのフローチャートです。

画像

 

 

ときに、ユーザークエリ、セキュリティチェックのためのSharePointユーザー:

3

 

読者は、SharePoint問合せ作業を理解したときにのみ実行される上記の。

Microsoft.SharePoint.Search.Queryの名前空間のような3件の問い合わせが含まれています。

  • そのような実行可能なSQL構文検索クエリのFullTextSqlQuery使用。

  • そのような実行可能なキーワード検索クエリ構文のKeywordQuery使用。

カスタム検索アプリケーションのためのQueryクラスを選択します

(自己のカスタム検索アプリケーションを判断するにはFullTextSqlQueryまたはKeywordQuery複雑な適切なクラスレベル)を、検索クエリをサポートするために、アプリケーションコードを望ん考えます。

    以下のリストのみが使用することによって識別FullTextSqlQuery SQLクエリ構文の追加要素は、検索のクラスをサポートしていますFREETEXT、CONTAINS、LIKEおよびORDER BY。

コードのデザイン

    public class SharePointSearch
    {

        #region Fields

        string queryStr = @"select hitHighlightedProperties,size,Write, author, path,
                            hitHighlightedSummary,title,contentclass
                            from scope() where " +
                            "\"scope\" = '{0}' AND FREETEXT(defaultproperties, '{1}') ";
        string conditionSearchSource = " AND CONTAINS(path,'{0}')";

        #endregion

        #region Constructor

        /// <summary>
        /// Default constructor.
        /// </summary>
        public SharePointSearch()
        {
        }

        #endregion

        #region Public Methods

        /// <summary>
        /// 
        /// </summary>
        /// <param name="scope"></param>
        /// <param name="searchSource"></param>
        /// <param name="keyword"></param>
        /// <param name="rowLimit"></param>
        /// <returns></returns>
        public DataTable GetSearchResultByKeyWord(string scope, string searchSource, string keyword, int rowLimit)
        {
            string query = string.Format(this.queryStr, scope, keyword);
            if (!string.IsNullOrEmpty(searchSource))
                query += string.Format(this.conditionSearchSource, searchSource);

            return this.CustomSearch(query, rowLimit);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="query"></param>
        /// <param name="rowLimit"></param>
        /// <returns></returns>
        public DataTable GetSearchResultByQuery(string query, int rowLimit)
        {
            return this.CustomSearch(query, rowLimit);
        }

        #endregion

        #region Private Methods

        /// <summary>
        /// Excute search query
        /// </summary>
        /// <param name="query"></param>
        /// <param name="rowLimit"></param>
        /// <returns></returns>
        private DataTable CustomSearch(string query, int rowLimit)
        {
            DataTable result = new DataTable();
            string url = SPContext.Current.Web.Url;

            using (SPSite site = new SPSite(url))
            {
                ServerContext context = ServerContext.GetContext(site);

                FullTextSqlQuery fullQuery = new FullTextSqlQuery(site);
                fullQuery.Culture = System.Globalization.CultureInfo.InvariantCulture;
                fullQuery.QueryText = query;
                fullQuery.ResultTypes = ResultType.RelevantResults;
                fullQuery.EnableStemming = false;
                fullQuery.IgnoreAllNoiseQuery = true;
                fullQuery.TrimDuplicates = true;

                fullQuery.KeywordInclusion = KeywordInclusion.AnyKeyword;
                fullQuery.RowLimit = rowLimit;
                if (SPSecurity.AuthenticationMode != System.Web.Configuration.AuthenticationMode.Windows)
                    fullQuery.AuthenticationType = QueryAuthenticationType.PluggableAuthenticatedQuery;
                else
                    fullQuery.AuthenticationType = QueryAuthenticationType.NtAuthenticatedQuery;

                ResultTableCollection rt = fullQuery.Execute();
                ResultTable resultTable = rt[ResultType.RelevantResults];
                result.Load(resultTable, LoadOption.OverwriteChanges);
            }

            return result;
        }

        #endregion
    }

 

FullTextSqlQuery属性が設定されている理由や、コケてXMLがあるため、次のように生成図ツールの結果ができます。

<?xml version="1.0" encoding="utf-8" ?>
<QueryPacket xmlns="urn:Microsoft.Search.Query" Revision="1000">
<Query domain="QDomain">
 <SupportedFormats><Format>urn:Microsoft.Search.Response.Document.Document</Format></SupportedFormats>
 <Context>
   <QueryText language="en-US" type="MSSQLFT"><![CDATA[ SELECT Title, Rank, Size, Description, Write, Path FROM portal..scope() WHERE FREETEXT(DefaultProperties, 'test') AND  ( ("SCOPE" = 'All Sites') )   ORDER BY "Rank" DESC ]]></QueryText>
 </Context>
 <Range><StartAt>1</StartAt><Count>20</Count></Range>
 <EnableStemming>false</EnableStemming>
 <TrimDuplicates>true</TrimDuplicates>
 <IgnoreAllNoiseQuery>true</IgnoreAllNoiseQuery>
 <ImplicitAndBehavior>false</ImplicitAndBehavior>
 <IncludeRelevanceResults>true</IncludeRelevanceResults>
 <IncludeSpecialTermResults>false</IncludeSpecialTermResults>
 <IncludeHighConfidenceResults>false</IncludeHighConfidenceResults>
</Query></QueryPacket>

 

 

SharePointコンテンツの言語内の項目がEN-USの場合は、、IEブラウザを設定してください:

画像

最上部に[en]英語。

 

 

 

著者:春ヤン

出典:http://www.cnblogs.com/springyangwc/

この記事では、著者とブログパークの合計に属し転載を歓迎しますが、この節で宣言され、著者の同意なしに保持され、記事ページの見かけ上の位置にある元の接続、法的責任を追及するそうでない場合は権利を与えられなければなりません。

ます。https://www.cnblogs.com/springyangwc/archive/2011/07/08/2101389.htmlで再現

おすすめ

転載: blog.csdn.net/weixin_33890499/article/details/93340928