在solr中,有参数“fl”,它在查询中提供投影。如何在liferay中实现相同的功能?
提前感谢您的帮助和建议。
答案 0 :(得分:0)
fl 不是SOLR查询中的投影,它只是选择结果字段。
首先:Liferay使用Lucene作为搜索引擎 - 而不是SOLR。
如果“ in liferay ”表示“在UI中”:您无法在UI中选择结果字段。结果是由Lucene过滤的数据库中的对象(对于某些搜索表单和一些配置,即使没有Lucene使用SQL直接从数据库中检索结果)。
如果“ in liferay ”表示“ in API ”:如果以低级别访问Lucene索引器,则可以选择结果字段({{1 }}方法无济于事)并使用...ServiceUtil.search
:
FieldSelector
您也可以使用任何其他查询方法。
请查看IndexSearcher indexSearcher = LuceneHelperUtil.getIndexSearcher(companyId);
IndexReader indexReader = indexSearcher.getIndexReader();
FieldSelector fieldSelector = new FieldSelector() {
public FieldSelectorResult accept(String fieldName) {
// Only return "my-field"
if ("my-field".equals(fieldName)) {
return FieldSelectorResult.LOAD_AND_BREAK;
}
return FieldSelectorResult.NO_LOAD;
}
};
TopDocs topDocs = indexSearcher.query(luceneQuery, maxDocuments);
// Retrieve only the selected fields for the hits
List<Document> results = new ArrayList<Document>();
for (int i = 0; i < topDocs.scoreDocs.length; i++) {
results.add(indexReader.document(topDocs.scoreDocs[i].doc, fieldSelector));
}
,了解如何正确构建查询。