Art*_*yom 2 search liferay faceted-search
我正在尝试通过AssetEntries实现自定义搜索portlet.目前AssetEntryQuery不允许使用关键字进行搜索.我正在尝试搜索FacetedSearcher.按关键字搜索似乎没问题.但是当我试图通过AssetTagNames进行搜索时
searchContext.setAssetTagNames(assetTagNames)
Run Code Online (Sandbox Code Playgroud)
它根本不起作用.这是我的一段代码
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());
Run Code Online (Sandbox Code Playgroud)
请求searchKeyword的结果查询: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)
Run Code Online (Sandbox Code Playgroud)
如您所见,AssetTag未应用于查询.我已经尝试过了
searchContext.setAttribute("assetTagNames",assetTagName);
Run Code Online (Sandbox Code Playgroud)
并评论了MultiValueFacet代码,但没有结果.为了进一步我需要搜索dateRange和类别.有人有什么想法吗?
幸运的是解决了这个.
如果您想搜索标签,您可以使用单独的方面,例如
MultiValueFacet assetTagsFacet = new MultiValueFacet(searchContext);
assetTagsFacet.setFieldName(Field.ASSET_TAG_NAMES);
searchContext.addFacet(assetTagsFacet);
Run Code Online (Sandbox Code Playgroud)
也可以searchContext.setAttribute("assetTagNames", assetTagName);
代替使用searchContext.setAssetTagNames(assetTagName);
通过类别搜索同样的事情:
MultiValueFacet assetCategoriesFacet = new MultiValueFacet(searchContext);
assetCategoriesFacet.setFieldName("assetCategoryTitles");
searchContext.addFacet(assetCategoriesFacet);
searchContext.setAttribute("assetCategoryTitles", assetCategoryName);
Run Code Online (Sandbox Code Playgroud)
另外我想通过自定义类型的JournalArticle进行搜索,我为此创建了facet,但在查询中得到了"type"两次.作为解决方案,我在设置entryClassName期间使用了MultiValueFacet而不是AssetEntriesFacet
MultiValueFacet assetEntriesFacet = new MultiValueFacet(searchContext);
assetEntriesFacet.setFieldName("entryClassName");
searchContext.setAttribute("entryClassName",JournalArticle.class.getName());
searchContext.addFacet(assetEntriesFacet);
Run Code Online (Sandbox Code Playgroud)