Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Liferay searchContext按资产和关键字搜索_Search_Liferay_Faceted Search - Fatal编程技术网

Liferay searchContext按资产和关键字搜索

Liferay searchContext按资产和关键字搜索,search,liferay,faceted-search,Search,Liferay,Faceted Search,我正试图通过AssetEntries实现自定义搜索portlet。当前AssetEntryQuery不允许使用关键字进行搜索。我正在尝试通过FacetedSearcher进行搜索。按关键字搜索似乎可以。但当我试图用AssetTagNames搜索时 searchContext.setAssetTagNames(assetTagNames) 这根本不起作用。 这是我的代码 SearchContext searchContext = new SearchContext(); Fa

我正试图通过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 assetTagName:sometag

+(+(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 assetTagsFacet = new MultiValueFacet(searchContext);
        assetTagsFacet.setFieldName(Field.ASSET_TAG_NAMES);
        searchContext.addFacet(assetTagsFacet);
还可以使用searchContext.setAttribute(“assetTagNames”,assetTagName)而不是
searchContext.setAssetAnames(AssettaName)

用于搜索同一事物的类别:

        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);