Changeset 5202


Ignore:
Timestamp:
05/15/14 12:19:25 (10 years ago)
Author:
Twan Goosen
Message:

Merged a change from 3.0 branch that checks both ID and Selflink fields when looking up a document by ID

Location:
vlo/trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • vlo/trunk

  • vlo/trunk/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/service/solr/impl/AbstractSolrQueryFactory.java

    r4972 r5202  
    2020import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection;
    2121import java.util.ArrayList;
     22import java.util.Iterator;
    2223import java.util.List;
    2324import java.util.Map;
     
    7374    }
    7475
     76    /**
     77     * Creates an OR filter query over the provided facet/value pairs (a query
     78     * that requests all records matching ANY of the facet/value pairs)
     79     *
     80     * @param facetValues map with facet/value pairs that should be matched
     81     * @return
     82     */
     83    protected final String createFilterOrQuery(Map<String, String> facetValues) {
     84        // escape value and wrap in quotes to make literal query
     85        final StringBuilder queryBuilder = new StringBuilder();
     86        final Iterator<Map.Entry<String, String>> iterator = facetValues.entrySet().iterator();
     87        while (iterator.hasNext()) {
     88            final Map.Entry<String, String> facetValue = iterator.next();
     89            queryBuilder.append(createFilterQuery(facetValue.getKey(), facetValue.getValue()));
     90            if (iterator.hasNext()) {
     91                queryBuilder.append(" OR ");
     92            }
     93        }
     94        return queryBuilder.toString();
     95    }
     96
    7597}
  • vlo/trunk/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/service/solr/impl/SolrDocumentQueryFactoryImpl.java

    r4852 r5202  
    1717package eu.clarin.cmdi.vlo.service.solr.impl;
    1818
     19import com.google.common.collect.ImmutableMap;
    1920import eu.clarin.cmdi.vlo.FacetConstants;
    2021import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection;
     
    3536
    3637    /**
    37      * 
     38     *
    3839     * @param documentFields fields that should be included in document queries
    3940     */
     
    6364        query.setQuery(SOLR_SEARCH_ALL);
    6465        // filter by ID
    65         query.addFilterQuery(createFilterQuery(FacetConstants.FIELD_ID, docId));
     66        // check for ID value in both 'id' and 'self link' fields, both ought to
     67        // be unique and self link use to be ID in old VLO, so this should keep old
     68        // URL's valid with a minimal likelihood of clashes
     69        final ImmutableMap<String, String> idOrQueryMap = ImmutableMap.<String, String>builder()
     70                .put(FacetConstants.FIELD_ID, docId)
     71                .put(FacetConstants.FIELD_SELF_LINK, docId)
     72                .build();
     73        query.addFilterQuery(createFilterOrQuery(idOrQueryMap));
     74       
    6675        // one result max
    6776        query.setRows(1);
  • vlo/trunk/vlo-web-app/src/test/java/eu/clarin/cmdi/vlo/service/solr/impl/SolrDocumentQueryFactoryImplTest.java

    r4966 r5202  
    7575    @Test
    7676    public void testCreateDocumentQueryForDocId() {
    77         final SolrQuery query = instance.createDocumentQuery("documentId");
     77        final SolrQuery query = instance.createDocumentQuery("document\"Id");
    7878
    7979        final String[] filterQueries = query.getFilterQueries();
    8080        assertEquals(1, filterQueries.length);
    81         assertEquals("id:\"documentId\"", filterQueries[0]);
     81        // expecting query that looks in both id and selflink fields with properly escaped values
     82        assertEquals("id:\"document\\\"Id\" OR _selfLink:\"document\\\"Id\"", filterQueries[0]);
    8283
    8384        final String fields = query.getFields();
Note: See TracChangeset for help on using the changeset viewer.