最近工作上遇到需要客製Sharepoint查詢的需求,這篇主要是研究過程的隨手筆記,避免明天一覺醒來忘到一乾二淨。由於內容較雜亂無章,請讀者自行斟酌是否要直接略過。

  • 文件: MOSS 2007 Custom Search
    1. 先考慮用現成Search,可以節省大把時間。SPS2007已經比SPS2003先進方便很多--Business Data Content(BDC)。
    2. 真需客製時可用Microsoft.Office.Server.Search.Query建立WebPart
    3. 跨系統搜索(例如: SPS, CMS)的做法
      1) 建立BDC Application Definition, 匯入SSP(Shared Services Provider)。其中要實作ProductIDEnumerator method,用來傳回Primary Key,讓Sharepoint可以用它讀資料回來做Index。
      2) 匯入時會建立BDC Entities的網頁,可用來檢視資料是否正確匯入。
      3) 在SSP中加入DBC Source,開始Crawl
      4) 建立自訂屬性對應到爬回來的屬性,加入一些進偕搜尋可以用來篩選的條件(Mapping時可設定順位,若沒A,用B)
      5) 重新再爬一次,這次會對應回Managed Properties。
      6) 自訂搜尋吧! 有三種方法:
          * Keyword Query syntax (直接送給Enterprise Search service)
          * SQL syntax (加料式SQL語法)
          * URL syntax (直接串連搜尋介面網頁)
    4. SQL法範例:
      SELECT        Title, Path, Description, HitHighlightedSummary, Rank, ProductMembershipRank, DomesticRegion, ProductCategory
      FROM            SCOPE()
      WHERE         FREETEXT(Description,'Fun') AND ProductCategory = 'Accommodation'
      AND DomesticRegion = 'Australia''s South West'
      ORDER BY MembershipRank DESC, RANK DESC
    5. SQL法的傳回結果:
      FullTextSqlQuery ftsq = new FullTextSqlQuery(ServerContext.Current); ftsq.ResultTypes = ResultType.RelevantResults;
      ftsq.QueryText = <YOURQUERY>;
      //Return the search results to a ResultTableCollection,可視為DataSet用
      ResultTableCollection results = ftsq.Execute()
    6. ResultTableCollection,可視為DataSet用,同時有ElapsedTime, HitHighlightedSummary等好用屬性。
  • 官方文件: Enterprise Search Architecture
    • 組成元件: Index Engine, Query Engine, Protocol Handlers(將不同管道取得的原始資料中的文件取出來), IFilters(取出文件中的文字內容與屬性), Content Index, Property Store, Search Configuration Data, Wordbreakers
    • Content Crawling: Filter Daemon使用Protocol Handler把資料取回來,用IFilter去取出其中的文字與Metadata,做全文檢索Index時會用到Workbreaker,Property與Index是分開存放的。Property存放處還一併記錄了文件層級的安控資訊。
    • Search Query Engine: 搜尋關鍵字會先經Wordbreaker處理。有加Property條件時,會先用Index查,再依查到結果去取回屬性資料做第二層篩選,沒權限的查詢結果項目也會被刪除。
    • 支援的資料來源: Sharepoint Content, Web Content, File Share, Exchange Folder Content, Business Data Content
    • Shared Scopes: 用一些條件把內容項目定義成一個特定範圍,可用的Rule包含: Address, Property Query, Content Source
    • Document Property Mappings: 有兩種Property-Crawled Prop.及Managed Prop.,二者間可以設定Mapping。
    • Server Mapping: 可以設定查到的結果怎麼Mapping成特定的URL,例如: File Share -> Web Link
    • Revevance Inclusions: 計算Ranking,改變結果項目顯示順序,可能的參數包含: Click distance, Hyperlink anchor text, URL surf depth, URL text matching, Automated metadata extraction, Automatic language detection, File type relevancy biasing, Enhanced text analysis
    • File Type Inclusions: 決定Crawler哪些檔案類別要擷取哪些不要
    • Logging: Query Log, Crawl Log
    • Site Level的搜尋管理: Scope, Keyword and best bet
  • 官方文件: Building Enterprise Search Queries
    • Keywords
      • 關鍵字: Keyword1 +Keyword2 -Keyword3
      • 屬性:
        <property name>:<value>
        <scope name>:<value>
        <collapsed results type>:<value>
      • 屬性範例: site:http://blog.darkthread.net, author:"Jeffrey Lee", scope:"ScopeName", duplicate:http://<displayUrl>(這個看不懂)
      • 查詢時,不會檢查URL, SiteName, File Ext,就是查不到東西
    • Enterprise Search SQL Language
      • 以ANSI-SQL為基礎
      • 不一定要精確,例如: program <-> programming
      • rank欄位會傳回吻合度,0-1000
      • 有些(謎之聲: 這叫很多吧?)SQL語法不可用: CONVERT(但CAST可以)、CREATE VIEW、DATASOURCE、AVG(), COUNT(), MAX(), MIN(), SUM(), GRANT, INSERT, CONTAINS, LIKE, MATCHES, 關聯欄位相比較(不會吧?), Parameter, REVOKE, SCOPE, SELECT ALL, Stored Procedure, UNKNOWN, UPDATE, BATCH...
      • 要指定Scope => SELECT ... FROM Scope() WHERE "scope" = "All Sites"...
      • CINTAINS精確比對,FREETEXT類似比對
      • LIKE, string/date/timestamp/numeric可以用大小於比對, NULL代表未定義
      • WHERE LastModifiedTime <=DATEADD (DAY, -2, DATEADD (HOUR, -4, GETGMTDATE()))
      • ARRAY [1,2] < ARRAY [1,2,3]
    • URL法
      • 參數: k-關鍵字, s-Scope, v=date or relevance, start=頁數
    • Enterprise Search Query Object Model
      • Web Part or ASPX
      • Microsoft.Office.Server.dll, Microsoft.Office.Server.Search.dll, Microsoft.SharePoint.dll
      • 物件
      • 用哪一個物件? 複雜時KeywordQuery會無法勝任,就用FullTextSqlQuery
    • Web Service: httq://Server_Name/[sites/][Site_Name/]_vti_bin/search.asmx
      • Query只傳回Title, Desc, Date, Relevance,QueryEx還可傳回Rank, Author, Size, Path...等。
      • QueryEx傳回DataSet!! (Yahoo~~~)
    • 自訂結果存取權限管控,決定User該不該看到該筆查詢: ISecurityTrimmer
    • 客製查詢結果: 修改XSLT
    • 客製查詢中心
    • 寫程式管理Search Content、Metadata、Scope、Keyword...
    • Featured Search: 在查詢結果中混入其他來源的結果(置入性行銷?)
  • 佛心來著的Sharepoint Search Service Tool: 可以輔助產生Query Syntax、馬上看結果的好東西

Comments

Be the first to post a comment

Post a comment