Liferay项目:使用Facet Search按类别实现“逻辑和”

时间:2015-07-22 03:51:10

标签: liferay faceted-search

我想按categoryids搜索webcontent对象。我已经定义了两组类别

  • 营销:
    • AA,BB,CC,DD
  • 国家:
    • 美国,法国,德国

我想找到一个包含[AA,France]的WebContent。逻辑应该是'AA 法国'。所以我定义了一个JSON文件,用于加载搜索条件。但我发现我的JSON文件使用'AA France'执行搜索:

{
  className: 'com.liferay.portal.kernel.search.facet.MultiValueFacet',
  data: {
    displayStyle: 'list',
    frequencyThreshold: 1,
    showAssetCount: true,
    values:[AA, France]
  },
  displayStyle: 'asset_categories',
  fieldName: 'assetCategoryIds',
  label: 'category',
  order: 'OrderHitsDesc',
  static: true,
  weight: 1.3
}

有人能告诉我如何使用''实现逻辑吗?

1 个答案:

答案 0 :(得分:0)

首先它应该是'values': ['AA', 'France'] - 尽管有些解析器会读取无效的JSON(有关详细信息,请参阅http://json.org/)。

如果你看一下MultiValueFacet.doGetFacetClause()的实现,你会看到:

 ...
    facetQuery.add(termQuery, BooleanClauseOccur.SHOULD);
 ...

BooleanClauseOccur.SHOULD表示 OR 逻辑。如果您需要 AND 逻辑,则必须实现自己的Facet(在 Ext插件中)。您可以将MultiValueFacet作为蓝图,并将BooleanClauseOccur.SHOULD替换为BooleanClauseOccur.MUST

如果您认为这是功能请求的内容 - 您可以在Liferay issues database中创建一个。