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

本教程介绍了如何为一个一分钟创建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页面):

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lovelife110

你的鼓励是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值