xwiki开发者指南-为一个一分钟创建App应用程序编写自定义SOLR搜索

2021-01-14 14:34:57 浏览数 (1)

本教程介绍了如何为一个一分钟创建App应用程序(即AWM)编写自定义SOLR搜索。在这个例子中,我们使用了"支出报表"应用程序。

目标是建立一个只会返回支出报表的搜索功能,并在facet(面板)使用支出报表的一些字段。在这个例子中,我们将为facet添加支出报表类的状态、组织、货币、客户和用户字段。

此外,我们将建立一个“List Facet”,允许显示StaticList以及DBList字段。此facet的代码可复用于此类型的任何字段。

为SOLR搜索配置代码

我们定制solrConfig对象的"filterQuery","facetFields"和"facetDisplayers"字段。其他配置选项是默认的。

  • filterQuery: 我们限制DOCUMENT类型的item和包含一个ERCode.ERClass类。
  • facetFields: 我们为ERCode.ERCodeClass类的属性添加一些额外的面板字段。我们还删除从默认配置不需要的某些字段。
  • facetDisplays: 我们声明用于每个字段的facet代码。

创建包含以下代码的ExpenseReport.Search页面:

{{velocity output="false"}} #set ($solrConfig = {   'filterQuery': [     'type:DOCUMENT',     'class:ERCode.ERCodeClass'   ],   'facetFields': [     'property.ERCode.ERCodeClass.status_string',     'property.ERCode.ERCodeClass.organisation_string',     'property.ERCode.ERCodeClass.currency_string',     'property.ERCode.ERCodeClass.user_string',     'author',     'creator',     'date',     'creationdate'   ],   'facetDisplayers': {     'type': 'Main.SolrTypeFacet',     'wiki': 'Main.SolrWikiFacet',     'locale': 'Main.SolrLocaleFacet',     'author': 'Main.SolrUserFacet',     'creator': 'Main.SolrUserFacet',     'attauthor': 'Main.SolrUserFacet',     'date': 'Main.SolrDateFacet',     'creationdate': 'Main.SolrDateFacet',     'attdate': 'Main.SolrDateFacet',     'class': 'Main.SolrClassFacet',     'attsize': 'Main.SolrFileSizeFacet',     'mimetype': 'Main.SolrMediaTypeFacet',     'property.ERCode.ERCodeClass.status_string' : 'ExpenseReport.ListFacet',     'property.ERCode.ERCodeClass.organisation_string' : 'ExpenseReport.ListFacet',     'property.ERCode.ERCodeClass.currency_string' : 'ExpenseReport.ListFacet',     'property.ERCode.ERCodeClass.client_string' : 'ExpenseReport.ListFacet',     'property.ERCode.ERCodeClass.user_string' : 'Main.SolrUserFacet'   } }) {{/velocity}} {{include reference="Main.SolrSearch" /}}

List字段的facet代码

我们需要为list字段添加facet代码,因为XWiki是默认不提供的。在ExpenseReport.ListFacet添加以下代码:

{{velocity}} #macro (displaySearchFacetValue_list $value)  #set($class = $xwiki.getDocument($pclass).getxWikiClass())  #set($prop = $class.get($propName))  ## here we convert the raw value in a nicely displayed value $prop.getMapValues().get($value).value #end #if ($facetValues)  ## here we extract the class name and field name so that we can avoid hardcoding it  #set($index1 = $facetField.name.lastIndexOf("."))  #set($index2 = $facetField.name.lastIndexOf("_"))  #set($pclass = $facetField.name.substring(0, $index1).substring(9))  #set($index1 = $index1 1)  #set($propName = $facetField.name.substring($index1, $index2))   {{html}}  <ul class="${propName}">     #displaySearchFacetValuesLimited($facetValues {} 'displaySearchFacetValue_list')  </ul>   {{/html}} #end {{/velocity}}

效果展示

下面是我们定制Solr搜索的效果(ExpenseReport.Search页面):

0 人点赞