精简面板(Refinement Panel,SharePoint也有些地方把Refinement翻译成“优化”)是SharePoint 2010搜索中新增加的一个非常好的功能,可以通过搜索结果中的文件类型、作者、修改时间、网站等属性,对搜索结果进行二次过滤,方便用户快速找到自己想要的功能。

2010搜索结果页面中的精简面板是一个Web部件,而且是允许用户进行自定义的,管理员可以随意增加需要在这里进行“过滤”的属性。关于如何在精简面板Web部件中添加自己需要的属性,玉树临风的kaneboy童鞋在这篇博客(点我点我)中已经解释得非常清楚了。这篇博客主要介绍一下托管元数据这种特殊类型的属性在SharePoint搜索结果精简面板中的表现。

如果我们使用默认的Web部件设置,通过点击Web部件属性,在“优化”属性分组中,我们可以看到SharePoint默认使用的优化参数设置。在默认设置的这一段Xml里面,除了文件类型、网站、作者、修改时间之外,我们会看到最后包含两个属性:

1、Title(标题)为“Managed Metadata Columns”、Type(类型)为“Microsoft.Office.Server.Search.WebControls.TaxonomyFilterGenerator”、MappedProperty(映射属性)为“ows_MetadataFactedInfo”

2、Title为“标记”(在英文版中是“Tags”)、Type与第一个相同,MappedProperty为“ows_MetadataFacetInfo, popularsocialtags”

这两个就是SharePoint默认设置中针对托管元数据的处理。它和其它的属性过滤的方式非常不同,而且这种区别不仅仅表现在Type的不同上。

“Managed Metadata Columns”是针对所有已经被配置为可以在搜索结果中进行优化过滤的托管元数据映射属性,只要配置“一切正常”的话,SharePoint会自动从搜索结果中找到这些托管元数据的属性,并且按照不同的来源字段,呈现出多种不同的属性过滤。它的MappedProperty必须设置为“ows_MetadataFacetInfo”,这样SharePoint才能够按照托管元数据的方式对其进行处理(后面会说明SharePoint针对托管元数据属性的处理和对文本类型属性的处理的不同之处);其次,这个看似奇怪的Title是不能随意修改的,只有把它设置为“Managed Metadata Columns”,SharePoint才会去寻找搜索结果中的所有已配置为可优化的托管元数据字段类型,如果我们只需要针对某个字段进行过滤,可以把Title设置成这个字段的名称(显示名称),而任何其他的设置,都会导致这个配置无效。

“标记”(Tags)是针对所有未在上一个节点中出现的其他托管元数据类型的数据的过滤(包括企业关键字、用户标签)。它的MappedProperty设置同样是不可修改的,而且Title也是不可修改的。

BUT!

有些时候,虽然是一个托管元数据类型的字段,它并不会按照字段的名称出现在精简面板中,而是一律出现在“标记”这个面板中,如下图所示:

在我进行配置过的几个环境中,只有在我自己的开发虚机中自动根据字段的名称出现了正常的样式(而且这个虚机的多个托管元数据类型的字段,只有一个会出现),如下图所示:

后来经过多次试验(期间改过多种配置,重新进行过多次完全爬网……),后来发现了一个可能的问题:

当我们进行完全爬网的时候,貌似SharePoint会针对每个托管元数据字段自动创建一个映射属性,这些映射属性的名称都是以owstaxId开头的,后面跟着这个字段的名称(应该是内部名称),下面这张图是我开发虚机里面的映射属性的一个截图:

如果仔细看一下的话,就知道为什么只有“知识分类”这个托管元数据字段会“正常”地出现在搜索结果的精简面板中了,它的第三个设置是“是”,其他所有托管元数据字段的设置都是“否”,而这个设置,就是是否允许此映射属性在精简面板中进行过滤,具体的属性设置如下图所示(红框圈起来的那个):

在我的另一个项目虚机里面,当我把这个owstaxIdxxxxx的这个设置开启之后,它在精简面板中就可以正常显示了(不过我在做试验的时候,还修改过其他配置,比如爬网账号、托管元数据的各级管理员、甚至手动给这个字段添加了一个映射属性,我不是100%地确定这些设置是否和这个问题有关系,但是只有当我把这个taxId的属性修改了之后,才一切正常)。

如果在你的环境里面,托管元数据类型的字段不能正常出现在搜索结果精简面板中的话,可以按照本文介绍的内容来配置一下。

最后,介绍一下SharePoint对托管元数据的“过滤”处理,和一个普通的文本类型属性的过滤处理有何不同。

我们可以尝试按照kaneboy那篇博客中的方法,把一个托管元数据的字段,添加一个“文本”类型的映射属性,并且修改默认的精简面板,添加这个属性(注意Type使用ManagedPropertyFilterGenerator,而不是TaxonomyFilterGenerator)。这种配置方法,在某些情况下,确实是可以按照我们的预期进行工作的,但是它主要的区别在于如下两个方面:

1、对于多值的处理。即使我们在创建映射属性的时候,选择了“具有多个值”,在精简面板中也不会真正地进行多值处理,只会把所有值拼合在一起,作为一个值进行过滤(比如在精简面板中会变成“分类1; 分类2;”,而不是“分类1”和“分类2”两个过滤条件)。

2、对于层级结构的处理。如果是按照本文前面的部分配置的托管元数据类型的过滤器,会按照托管元数据的层级结构进行过滤。举个例子来说,如果我们的搜索结果中某个字段的值有如下几种:猫、波斯猫、孟买猫(其中“猫”是后两者的父级),那么这三个值都会出现在精简面板中,如果我们在精简面板中选择了“猫”的时候,搜索结果中所有标记为“猫”的,以及所有标记为“猫”的所有后代节点的结果,都会被过滤出来。而如果我们是作为一个文本类型的字段进行处理的时候,选择“猫”时,就只会过滤出被标记为“猫”的那些结果,而不会出现被标记为“波斯猫”、“孟买猫”的那些结果了……

其实这两个区别背后的原因,应该是针对不同的字段进行的设置,一个是表面的字段(就是我们存放托管元数据那个类型的字段),一个是背后的字段(注意看上面那张截图中,映射的实际字段是“ows_taxId_KBCatalog”,而不是“ows_KBCatalog”)。

我折腾这个问题的时候,google了很多文章,不过似乎没有谁提到过这个背后的“taxId”字段的那个精简设置的属性。

参考链接:

1、精简面板的设置参考(来自MSDN)

2、在列表定义中创建托管元数据类型字段时需要的一些额外设置(里面提到了一些精简面板的问题,看了这篇blog我才注意到一个托管元数据字段的背后居然有这么多个辅助字段)

btw,春节快乐!

转载于:https://www.cnblogs.com/erucy/archive/2012/01/22/2416117.html

托管元数据(2)——托管元数据和搜索中的精简面板相关推荐

  1. .net中的托管、非托管

    1.托管代码Managed Code 托管代码是编译器创建,被编译成中间语言(IL),IL被保存在程序集(描述代码的类.方法它和属性的元数据文件)中. 托管代码运行在CLR中: 托管代码独立于平台和语 ...

  2. 超详细解析托管与非托管

    1      DLLImport的使用 using System; using System.Runtime.InteropServices; //命名空间 class Example { //用Dl ...

  3. 浅析托管与非托管C++代码

    随着Visual Studio .NET 2003在四月24号的发布,许多开发者开始考虑使用一项被成为托管 代码 的新技术.但是对于C++开发者来说,可以会 遇到一些麻烦.因为C++是比较特殊的. 什 ...

  4. 美团搜索中NER技术的探索与实践

    1. 背景 命名实体识别(Named Entity Recognition,简称NER),又称作"专名识别",是指识别文本中具有特定意义的实体,主要包括人名.地名.机构名.专有名词 ...

  5. 【收藏】关于元数据(Metadata)和元数据管理,这是我的见过最全的解读!

    本文主要从元数据的定义.作用.元数据管理现状.管理标准和元数据管理功能等方面讲述了我对元数据(Metadata)和元数据管理的认知及理解. 元数据管理 一.元数据的定义 按照传统的定义,元数据(Met ...

  6. 【论文阅读】查询搜索中的安全和效率权衡(ACM 10.1145)

    英文标题: Privacy and Efficiency Tradeoffs for Multiword Top K Searchwith Linear Additive Rank Scoring 中 ...

  7. 有关Dispose,Finalize,GC.SupressFinalize函数-托管与非托管资源释放的模式

    //这段代码来自官方示例,删除了其中用处不大的细节using System; using System.ComponentModel;/**** 这个模式搞的这么复杂,目的是:不管使用者有没有手动调用 ...

  8. 元数据--MySQL获取元数据的方法

    元数据:数据的数据,用以描述数据的信息也是数据,被称为元数据 [MySQL]获取元数据的方法 MySQL提供了以下三种方法用于获取数据库对象的元数据: 1)show语句 2)从INFORMATION_ ...

  9. 实践数据湖iceberg 第十四课 元数据合并(解决元数据随时间增加而元数据膨胀的问题)

    系列文章目录 实践数据湖iceberg 第一课 入门 实践数据湖iceberg 第二课 iceberg基于hadoop的底层数据格式 实践数据湖iceberg 第三课 在sqlclient中,以sql ...

最新文章

  1. extjs editgrid增加一行
  2. java在线阅读word_java在线预览txt、word、ppt、execel,pdf代码
  3. pyinstaller 安装使用方法
  4. Mvc 自带分页控件PagedList.Mvc Demo示例
  5. geometry-api-java 学习笔记(二)点 Point
  6. Practical Mathematical Handwriting
  7. 不依赖浏览器控制台的JavaScript断点调试方法
  8. 读《scikiit-learn机器学习》黄永昌第五章
  9. c++ 中断_「正点原子NANO STM32开发板资料连载」第十章 外部中断实验
  10. QML 圆角进度条实现 圆角剪切
  11. linux asio 读取串口,ASIO 串口编程
  12. 用辩证数学解答“缸中之脑”
  13. 微搭典型应用需求梳理
  14. 网络应用程序的通信视角
  15. 什么是格局、境界、眼界、眼光
  16. Oracle分页实现
  17. 「自控元件及线路」4 小功率同步电机
  18. 【深度学习入门基础】一、从线性代数和微积分的角度看神经网络
  19. GPS网检验重复边和同步环是否合格
  20. 用Excel做一个简易的投票工具

热门文章

  1. 量子密钥和量子计算机是什么关系,关于量子通信,这些问题你困惑过吗?
  2. Sublime Text2 中文乱码
  3. 使用DOM4J解析XML及采用Schema校验的方法
  4. “焖鸡”游戏中的排序问题
  5. Intel Haswell/Broadwell架构/微架构/流水线 (8)-Broadwell微架构
  6. 综合项目:Keepalived+Redis+Haproxy实现主从热备、负载均衡、秒级切换
  7. Mosquito的优化——其他优化(九)
  8. python开发环境管理:pip和virtualenv
  9. 安卓手机上跑_第一名易主?看看安兔兔公布的二月份安卓手机性能跑分排行
  10. python如何创建一个类_python 3——自定义一个类、object类