2015-04-29 6 views
0

Можно ли добавить дополнительный параметр в запрос Solr с использованием Spring Data Solr, который генерирует следующий запрос?Добавить настраиваемый параметр в Solr при использовании Spring Data Solr

"params": { 
    "indent": "true", 
    "q": "*.*", 
    "_": "1430295713114", 
    "wt": "java", 
    "AuthenticatedUserName": "[email protected]" 
} 

Я хочу, чтобы добавить параметр, необходимый Apache Manifoldcf, AuthenticatedUserName и его значение, наряду с другими те, которые автоматически заселенных Spring Data Solr (кв, вес).

Спасибо, В.

ответ

0

мне удалось заставить его работать, глядя на исходный код класса SolrTemplate, но мне было интересно, если есть менее навязчивым решение.

public Page<Document> searchDocuments(DocumentSearchCriteria criteria, Pageable page) { 
    String[] words = criteria.getTitle().split(" "); 
    Criteria conditions = createSearchConditions(words); 
    SimpleQuery query = new SimpleQuery(conditions); 
    query.setPageRequest(page); 
    SolrQuery solrQuery = queryParsers.getForClass(query.getClass()).constructSolrQuery(query); 
    solrQuery.add(AUTHENTICATED_USER_NAME, criteria.getLoggedUsername()); 
    try { 
     String queryString = this.queryParsers.getForClass(query.getClass()).getQueryString(query); 
     solrQuery.set(CommonParams.Q, queryString); 
     QueryResponse response = solrTemplate.getSolrServer().query(solrQuery); 

     List<Document> beans = convertQueryResponseToBeans(response, Document.class); 
     SolrDocumentList results = response.getResults(); 

     return new SolrResultPage<>(beans, query.getPageRequest(), results.getNumFound(), results.getMaxScore()); 
    } catch (SolrServerException e) { 
     log.error(e.getMessage(), e); 
     return new SolrResultPage<>(Collections.<Document>emptyList()); 
    } 
} 

private <T> List<T> convertQueryResponseToBeans(QueryResponse response, Class<T> targetClass) { 
    return response != null ? convertSolrDocumentListToBeans(response.getResults(), targetClass) : Collections 
      .<T> emptyList(); 
} 

public <T> List<T> convertSolrDocumentListToBeans(SolrDocumentList documents, Class<T> targetClass) { 
    if (documents == null) { 
     return Collections.emptyList(); 
    } 
    return solrTemplate.getConverter().read(documents, targetClass); 
} 

private Criteria createSearchConditions(String[] words) { 
    return new Criteria("title").contains(words) 
      .or(new Criteria("description").contains(words)) 
        .or(new Criteria("content").contains(words)) 
        .or(new Criteria("resourcename").contains(words)); 
} 

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

  • Нет связанных вопросов^_^