【问题标题】:Liferay searchContext search by AssetTags and KeywordsLiferay searchContext 按 AssetTags 和关键字搜索
【发布时间】:2013-05-08 12:17:20
【问题描述】:

我正在尝试通过 AssetEntries 实现自定义搜索 portlet。目前 AssetEntryQuery 不允许使用关键字进行搜索。我正在尝试通过 FacetedSearcher 进行搜索。按关键字搜索似乎没问题。但是当我尝试按 AssetTagNames 搜索时

searchContext.setAssetTagNames(assetTagNames)

它根本不起作用。 这是我的一段代码

 SearchContext searchContext = new SearchContext();
         Facet assetEntriesFacet = new AssetEntriesFacet(searchContext);
         assetEntriesFacet.setStatic(true);
         searchContext.addFacet(assetEntriesFacet);

         /*MultiValueFacet multiValueFacet=new MultiValueFacet(searchContext);
         multiValueFacet.setFieldName("assetTagNames");
         multiValueFacet.setStatic(false);
         searchContext.addFacet(multiValueFacet);*/

       searchContext.setCompanyId(themeDisplay.getCompanyId());
       String []assetTagNames=new String[1];
        assetTagNames[0]=  assetTagName;
        searchContext.setAssetTagNames(assetTagNames);
        searchContext.setKeywords(keywords);
        String[] entryClassName = {JournalArticle.class.getName()};
        searchContext.setEntryClassNames(entryClassName);

        Indexer indexer = FacetedSearcher.getInstance();
       // searchContext.setAndSearch(true);
        Hits hits = indexer.search(searchContext);
        System.out.println("Hits: " + hits.getLength());

请求的结果查询 搜索关键字:key1key1 资产标签名称:一些标签

+(+(companyId:1) +((+(entryClassName:com.liferay.portlet.journal.model.JournalArticle) +(status:0)))) +(assetCategoryTitles:*key1key1* assetCategoryTitles_en_US:*key1key1* assetTagNames:*key1key1* comments:key1key1 content:key1key1 description:key1key1 properties:key1key1 title:key1key1 url:key1key1 userName:*key1key1* classPK:key1key1 content_en_US:key1key1 description_en_US:key1key1 entryClassPK:key1key1 title_en_US:key1key1 type:key1key1)

如您所见,AssetTag 未应用于查询。 我已经尝试过设置了

searchContext.setAttribute("assetTagNames",assetTagName);

并评论了 MultiValueFacet 代码,但没有结果。 进一步我需要按日期范围和类别搜索。有人知道吗?

【问题讨论】:

    标签: search liferay faceted-search


    【解决方案1】:

    幸运地解决了这个问题。

    如果您想搜索标签,您必须为此使用单独的构面,例如

            MultiValueFacet assetTagsFacet = new MultiValueFacet(searchContext);
            assetTagsFacet.setFieldName(Field.ASSET_TAG_NAMES);
            searchContext.addFacet(assetTagsFacet);
    

    同时使用searchContext.setAttribute("assetTagNames", assetTagName); 代替searchContext.setAssetTagNames(assetTagName);

    通过类别搜索同样的事情:

            MultiValueFacet assetCategoriesFacet = new MultiValueFacet(searchContext);
            assetCategoriesFacet.setFieldName("assetCategoryTitles");
            searchContext.addFacet(assetCategoriesFacet);
            searchContext.setAttribute("assetCategoryTitles", assetCategoryName);
    

    我还想按 JournalArticle 的自定义类型进行搜索,我为此创建了 facet,但在查询中得到了两次“type”。作为解决方案,我在设置 entryClassName 期间使用了 MultiValueFacet 而不是 AssetEntriesFacet

        MultiValueFacet assetEntriesFacet = new MultiValueFacet(searchContext);
        assetEntriesFacet.setFieldName("entryClassName");
        searchContext.setAttribute("entryClassName",JournalArticle.class.getName());
        searchContext.addFacet(assetEntriesFacet);
    

    【讨论】:

      猜你喜欢
      • 2019-12-13
      • 1970-01-01
      • 2013-08-09
      • 2013-09-03
      • 1970-01-01
      • 2020-02-07
      • 2012-07-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多