2015-03-27 4 views
1

В файле solr имеется параметр «fl», который обеспечивает проекцию в запросе. Как я могу достичь той же функции в liferay?Проекция в запросе

Заранее благодарю вас за помощь и предложения.

ответ

0

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, чтобы узнать, как правильно построить запрос.

Смежные вопросы