В файле solr имеется параметр «fl», который обеспечивает проекцию в запросе. Как я могу достичь той же функции в liferay?Проекция в запросе
Заранее благодарю вас за помощь и предложения.
В файле solr имеется параметр «fl», который обеспечивает проекцию в запросе. Как я могу достичь той же функции в liferay?Проекция в запросе
Заранее благодарю вас за помощь и предложения.
fl не является проекцией в запросе SOLR, он просто выбирает поля результатов.
Прежде всего: Liferay использует Lucene в качестве поисковой системы - не SOLR.
Если «в Liferay» означает «в пользовательском интерфейсе»: Вы не можете выбрать поля результата в пользовательском интерфейсе. Результатами являются объекты из базы данных, которые были отфильтрованы Lucene (для некоторых форм поиска и некоторых конфигураций результат получается даже без Lucene непосредственно из базы данных с использованием SQL).
Если «в Liferay» означает «в API»: Вы можете выбрать поля результата, если вы получаете доступ к индексатор Lucene в низком уровне (в ...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));
}
Вы также можете использовать любой из других методов запроса. Посмотрите на com.liferay.portal.search.lucene.LuceneIndexSearcher
, чтобы узнать, как правильно построить запрос.