Project

General

Profile

« Previous | Next » 

Revision 9550f4b4

Added by Andreas Kohlbecker over 8 years ago

#4716 using BooelanQuery added with Occur.FILTER instead of deprecated search method

View differences:

cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/search/LuceneSearch.java
19 19
import org.apache.lucene.search.BooleanClause.Occur;
20 20
import org.apache.lucene.search.BooleanQuery;
21 21
import org.apache.lucene.search.BooleanQuery.Builder;
22
import org.apache.lucene.search.Filter;
23 22
import org.apache.lucene.search.IndexSearcher;
24 23
import org.apache.lucene.search.MultiCollector;
25 24
import org.apache.lucene.search.Query;
......
64 63

  
65 64
    private Class<? extends CdmBase> directorySelectClass;
66 65

  
67
    private Filter filter = null;
66
    private BooleanQuery filter = null;
68 67

  
69 68
    protected Class<? extends CdmBase> getDirectorySelectClass() {
70 69
        return pushAbstractBaseTypeDown(directorySelectClass);
......
83 82
    /**
84 83
     * @return the filter
85 84
     */
86
    public Filter getFilter() {
85
    public BooleanQuery getFilter() {
87 86
        return filter;
88 87
    }
89 88

  
90 89
    /**
91 90
     * @param filter the filter to set
92 91
     */
93
    public void setFilter(Filter filter) {
92
    public void setFilter(BooleanQuery filter) {
94 93
        this.filter = filter;
95 94
    }
96 95

  
......
234 233
     * @throws IOException
235 234
     */
236 235
    public TopDocs executeSearch(int maxNoOfHits) throws IOException {
237
        Query fullQuery = expandQuery();
236
        BooleanQuery fullQuery = expandQuery();
238 237
        logger.info("lucene query string to be parsed: " + fullQuery.toString());
239
        return getSearcher().search(fullQuery, filter, maxNoOfHits);
238
        return getSearcher().search(fullQuery, maxNoOfHits);
240 239

  
241 240
    }
242 241
    /**
......
257 256
            logger.info("limiting pageSize to MAX_HITS_ALLOWED = " + MAX_HITS_ALLOWED + " items");
258 257
        }
259 258

  
260
        Query fullQuery = expandQuery();
259
        BooleanQuery fullQuery = expandQuery();
261 260
        logger.info("final query: " + fullQuery.toString());
262 261

  
263 262
        int offset = pageNumber * pageSize;
......
282 281
        TermFirstPassGroupingCollector firstPassCollector = new TermFirstPassGroupingCollector(
283 282
                groupByField, groupSort, limit);
284 283

  
285
        getSearcher().search(fullQuery, filter , firstPassCollector);
284
        getSearcher().search(fullQuery, firstPassCollector);
286 285
        Collection<SearchGroup<BytesRef>> topGroups = firstPassCollector.getTopGroups(0, true); // no offset here since we need the first item for the max score
287 286

  
288 287
        if (topGroups == null) {
......
302 301
                groupByField, topGroups, groupSort, withinGroupSort, maxDocsPerGroup , getScores,
303 302
                getMaxScores, fillFields
304 303
                );
305
        getSearcher().search(fullQuery, filter, MultiCollector.wrap(secondPassCollector, allGroupsCollector));
304
        getSearcher().search(fullQuery, MultiCollector.wrap(secondPassCollector, allGroupsCollector));
306 305

  
307 306
        TopGroups<BytesRef> groupsResult = secondPassCollector.getTopGroups(0); // no offset here since we need the first item for the max score
308 307

  
......
322 321
    /**
323 322
     * expands the query by adding a type restriction if the
324 323
     * <code>cdmTypeRestriction</code> is not <code>NULL</code>
324
     * and adds the <code>filter</code> as Boolean query
325
     * clause with {@link Occur#FILTER}
325 326
     */
326
    protected Query expandQuery() {
327
        BooleanQuery fullQuery;
327
    protected BooleanQuery expandQuery() {
328
        BooleanQuery fullQuery = null;
329
        Builder fullQueryBuilder = null;
330

  
328 331
        if(cdmTypeRestriction != null){
329
            fullQuery = QueryFactory.addTypeRestriction(query, cdmTypeRestriction);
332
            fullQueryBuilder = QueryFactory.addTypeRestriction(query, cdmTypeRestriction);
333
        }
334

  
335
        if(filter != null) {
336
            if(fullQueryBuilder == null) {
337
                fullQueryBuilder = new Builder();
338
                fullQueryBuilder.add(this.query, Occur.MUST);
339
            }
340
            fullQueryBuilder.add(filter, Occur.FILTER);
341
        }
342

  
343
        if(fullQueryBuilder != null) {
344
            fullQuery = fullQueryBuilder.build();
330 345
        } else {
331 346
            fullQuery = this.query;
332 347
        }
348

  
333 349
        return fullQuery;
334 350
    }
335 351

  
......
346 362
        return query;
347 363
    }
348 364

  
349
    public Query getExpandedQuery() {
365
    public BooleanQuery getExpandedQuery() {
350 366
        expandQuery();
351 367
        return query;
352 368
    }

Also available in: Unified diff