Sharepoint学习笔记—习题系列--70-573习题解析 -(Q94-Q96)

Question 94
You need to create a custom application that provides users with the ability to create a managed property.
The managed property name must be specified in the args[1] parameter.
You write the following code segment for the application. (Line numbers are included for reference only.)
01 SPSite currentSite = new SPSite("http://intranet");
02 SearchContext context = SearchContext.GetContext(currentSite);
03 Schema schema = new Schema(context);
Which code segment should you add to the application?
A. context.SearchApplication.CrawlStores.Create(args[1]);
B. ManagedPropertyCollection properties = schema.AllManagedProperties;
ManagedProperty newMng = properties.Create(args[1], ManagedDataType.Text);
C. ManagedPropertyCollection properties = schema.AllManagedProperties;
ManagedProperty newMng = properties.CreateCrawlMonProperty();
newMng.Name = args[1];
D. schema.AllCategories.Create(args[1], Guid.NewGuid());

解析:
  本题的意图是想通过代码来创建托管属性(Managed Property)。
首先让我们来大致了解什么是托管属性,托管属性(Managed Property)是可通过其他方法(例如,在搜索结果中显示数据)进行搜索或使用的元数据。默认索引架构提供一组从已爬网属性到托管属性的映射。在使用内容 SSA 进行爬网时,将修改默认映射以适应常见内容格式。特定内容源或其他索引连接器可公开其他更适用于您内容的已爬网属性。
可以将一个托管属性与一个或多个全文本索引关联。您必须使用全文本索引以获得查询的排名结果。
可以为一个托管属性启用查询优化,以便将此属性中的数据添加为查询结果页上的深化选项。
可以为托管属性配置命中突出显示摘要。它是在每个查询结果的搜索结果页上出现的托管属性的摘要。此摘要会显示来自包含查询文本的项的摘要,并会将突出显示格式应用于查询文本。可以使用 ManagedProperty.SummaryType 属性启用此功能。默认情况下,为 body 属性和 title 属性配置命中突出显示摘
SharePoint站点中的列表和文档库都具有其特定专有的属性。当爬网器索引这些容器中的内容时,这些定制的元数据都会被搜集起来。管理员可以把这些自定义的元数据暴露给用户,以便可以在搜索中心中用于检索。在高级搜索页面中有一个属性选取器,可以选取这些托管属性。我们可以在高级搜索页面的属性选取器中添加一个托管属性,只需要扩展一下附加在选取属性的高级搜索框上的XML即可。
托管属性常用于搜索纵向市场,因为它们能为您提供一种方法,定义与用来筛选、报告和/或细化目的的数据相关联的自定义属性。在 SharePoint 2010 和先前版本的 SharePoint 中,对于如何使用托管属性有一定限制,因此用起来较为麻烦:
  在 SharePoint 2013 中,则去除了限制,增加了可访问性。您仍然可以在 Search Service 应用程序 (SSA) 层次级别创建托管属性,但您现在还可以在网站集级别创建托管属性。整个过程如同以前一样开始,先创建一个已爬网属性。然而,这里新增了一项功能,那就是当您在 SharePoint 2013 中创建一个网站栏时,它会被自动 配置成一个已爬网属性,就在您打算开始执行第一次爬网前。
   在进行托管属性的编程时,我们常常要用到如下的相关接口:
1.ManagedProperty:指定一个托管属性。
2.ManagedPropertyCollection:指定托管属性的集合。
可使用 ManagedPropertyCollection.Create 方法创建托管属性。【这就是本题用到的】
3.CrawledProperty:已爬网属性是一些元数据,从内容源提取这些元数据可使数据能用于搜索。
可使用 ManagedProperty.SetCrawledPropertyMappings 方法配置已爬网属性映射。
4.FullTextIndex:利用全文本索引,可同时在多个托管属性中进行查询。
可使用 ManagedProperty.GetFullTextIndexMappings 方法将托管属性映射到一个或多个全文本索引。
5.RankProfile:可使用排名配置文件指定如何对查询结果进行相关性排名。
可使用 RankProfile.GetManagedPropertyBoosts 方法来关联托管属性提升配置。
可使用 RankProfile.GetQualityComponents 方法来关联用于质量排名的托管属性。
6.RefinerConfiguration:利用查询优化,可以使用为一个查询结果计算的聚合统计数据来优化该查询结果。
可通过将 ManagedProperty.RefinementEnabled 属性设置为 True 来将查询优化与托管属性关联。这将为该托管属性创建 RefinerConfiguration。
可使用 ManagedProperty.GetRefinerConfiguration 方法和 ManagedProperty.SetRefinerConfiguration 方法修改 RefinerConfiguration。
 于是回过头来看本题,本题要求创建一个托管属性,由上我们知道,需要用到ManagedPropertyCollection。进一步研究其成员。找到Create方法,此方法用于向托管属性集中添加新的托管属性。Create方法的说明如下:

public ManagedProperty Create(
 string name,
 ManagedDataType managedType
)

  这是一个带两个参数的方法,name即为新创建的托管属性的名称。ManagedDataType取值于枚举,可为: Unsupported,Text,Integer,Decimal,DateTime,YesNo,Binary,Double等类型。
  所以回到本题的备选项,可以快速 地定位选项B是正确答案。
选项A. context.SearchApplication.CrawlStores.Create(args[1]); 这里的CrawStores是一个属性,此属性用于返回由当前的SearchServiceApplication管理的所有的 CrawlStoreCollection对象。CrawlStoreCollection的Create方法是用来根据给定的Connection String创建一个新的爬网数据库。
选项C. ManagedPropertyCollection properties = schema.AllManagedProperties;
ManagedProperty newMng = properties.CreateCrawlMonProperty();
newMng.Name = args[1]; // CreateCrawlMonProperty 方法是用于创建或返回一个名叫'CrawlMonProperty'.的特殊的托管属性
选项D. schema.AllCategories.Create(args[1], Guid.NewGuid());//本选项先是返回CategoryCollection 对象,此对象是搜索服务程序的metadata schema中存在的Crawled Property Categories。此选项与托管属性操作没什么关系。
所以本题目正确选项应该是B
参考:
http://msdn.microsoft.com/en-us/library/microsoft.office.server.search.administration.managedpropertycollection.create.aspx
http://msdn.microsoft.com/zh-cn/library/ff464344(v=office.14).aspx#schema_concepts_managed
http://msdn.microsoft.com/en-us/library/microsoft.office.server.search.administration.managedpropertycollection_members.aspx
http://msdn.microsoft.com/en-us/library/ee585012(v=office.14).aspx

Question 95
You need to create a Web Part that displays all of the content created by a specific user.
You write the following code segment. (Line numbers are included for reference only.)
01 private void keywordQueryExecute(string searchAuthor)
02 {
03   KeywordQuery kRequest = new KeywordQuery(ServerContext.Current);
04  
05   kRequest.QueryText = strQuery;
06   ResultTableCollection resultTbls = kRequest.Execute();
07 }
Which code segment should you add at line 04?
A. string strQuery = "author:" + searchAuthor;
B. string strQuery = "docID:" + searchAuthor;
C. string strQuery = "SELECT Title, Rank, Write, Url FROM SCOPE() WHERE author = " + searchAuthor;
D. string strQuery = "SELECT Title, Rank, Write, Url FROM SCOPE() WHERE docID = " + searchAuthor;

解析:
  本题用到了KeywordQuery类,此类属于Microsoft.SharePoint.Search.Query命名空间.
Windows SharePoint Services 搜索提供一个新的查询对象模型,可以在自定义搜索 Web 部件和搜索应用程序中使用此模型来执行对搜索服务的查询。此查询对象模型是在 Microsoft.SharePoint.Search.dll 中找到的 Microsoft.SharePoint.Search.Query 命名空间中实现的。
若要使用查询对象模型,则必须设置对以下 DLL 的引用:Microsoft.SharePoint.Search.dll 和Microsoft.SharePoint.dll。
Microsoft.SharePoint.Search.Query 命名空间包括三个查询类:
1.Query  此类不适合于直接从代码中使用,但适合于作为搜索查询对象模型类的基实现。在代码中,请使用 FullTextSqlQuery 和 KeywordQuery 类。
2.FullTextSqlQuery  使用此类可执行 SQL 语法搜索查询。
3.KeywordQuery  使用此类可执行关键字语法搜索查询。
 本题就是使用关键字语法进行搜索查询。
Windows SharePoint Services 搜索包含用于生成关键字查询的新的关键字语法。此语法比 SQL 搜索语法更易于使用,原因是无需通过搜索条件进行分析以生成 SQL 语句;将搜索条件直接传递给搜索服务。
可以在 Windows SharePoint Services 搜索关键字查询中传递两类条件:
1.关键字(搜索请求的实际查询单词)
2.属性筛选器(搜索请求的属性约束)
可以将下列任一项用作关键字:
1.一个 word(包括一个或多个不带空格或标点的字符)
2.一个 phrase(包括两个或多个连在一起的单词,它们之间用空格分隔,但单词必须用引号引起来)
3.一个 prefix(包括单词的从头开始的一部分)
有了上面的知识铺垫,回到本题,本题要根据某个创建者去搜索它所创建的内容。由于使用的是KeywordQuery 关键字语法搜索,所以可以直接排除C.D,因为它们都是基于SQL语句在创建搜索查询。至于B,由于它是把docID作为过滤条件,所以不符合本题应该把创建者作为过滤条件要求。 所以选项B也应排除。
因此本题目正确选项应该是A
参考:
http://msdn.microsoft.com/en-us/library/ff394509.aspx
http://msdn.microsoft.com/zh-cn/library/ms467796(v=office.12).aspx

Question 96
You need to create a Web Part that displays all of the content created by a specific user.
You write the following code segment. (Line numbers are included for reference only.)
01 FullTextSqlQuery qry = new FullTextSqlQuery(ServerContext.GetContext(SPContext.Current.Site));
02 qry.ResultTypes = ResultType.RelevantResults;
03
04 qry.QueryText = strQuery;
05 ResultTableCollection results = qry.Execute();
Which code segment should you add at line 03?
A. string strQuery = "author:" + searchAuthor;
B. string strQuery = "docID:" + searchAuthor;
C. string strQuery = "SELECT Title,Author,Path FROM SCOPE() WHERE author = '" + searchAuthor + "'";
D. string strQuery = "SELECT Title,Creator,Path FROM SCOPE() WHERE docID = '" + searchAuthor + "'";

解析:
 本题是Question95的延续,只不过使用是FullTextSqlQuery 类的SQL 语法搜索查询。
Windows SharePoint Services 搜索通过 SQL 语法提供对构造复杂搜索查询的支持。在使用 SQL 语法搜索查询时,可使用的示例包括:
1.比较运算符,例如“>”、“<”或“=”。有关详细信息,请参阅文字值比较。
2.多个逻辑运算符,例如 AND、OR 和 NOT。有关详细信息,请参阅 WHERE 子句。
3.通配符搜索。有关详细信息,请参阅在 CONTAINS 谓词中使用通配符。
Windows SharePoint Services 搜索查询类似于标准 SQL 查询,如语法中所示。
SELECT <columns>
FROM <content source>
WHERE <conditions>
RANK BY <conditions>
ORDER BY <columns>
  回到本题再结合要求(仍然是根据创建者进行搜索)就很容易能确定答案了。
所以本题目正确选项应该是C
参考:
http://msdn.microsoft.com/zh-cn/library/ms443580(v=office.12).aspx http://msdn.microsoft.com/en-us/library/ms455094.aspx