Package org.bigbluebutton.webminer.search

Source Code of org.bigbluebutton.webminer.search.Search$TopFieldDocsSearchResult

package org.bigbluebutton.webminer.search;

/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements.  See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License.  You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

import java.io.IOException;

import org.apache.log4j.Logger;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.FilterIndexReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.queryParser.QueryParser.Operator;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.Searcher;
import org.apache.lucene.search.Sort;
import org.apache.lucene.search.TopDocCollector;
import org.apache.lucene.search.TopFieldDocCollector;
import org.apache.lucene.search.TopFieldDocs;
import org.apache.lucene.store.FSDirectory;

import org.bigbluebutton.webminer.config.ConfigHandler;

/** Simple command-line based search demo. */
public class Search {

  private static Search instance;
  private IndexReader reader = null;
  private Searcher searcher;
  private Analyzer analyzer;

  private static Logger logger = Logger.getLogger(Search.class);

  /**
   * Use the norms from one field for all fields. Norms are read into memory,
   * using a byte of memory per document per searched field. This can cause
   * search of large collections with a large number of fields to run out of
   * memory. If all of the fields contain only a single token, then the norms
   * are all identical, then single norm vector may be shared.
   */
  private static class OneNormsReader extends FilterIndexReader {
    private String field;

    public OneNormsReader(IndexReader in, String field) {
      super(in);
      this.field = field;
    }

    public byte[] norms(String field) throws IOException {
      return in.norms(this.field);
    }
   
  }

  private Search() {

  }

  public void startSearch() {
    try {
      IndexReader.unlock(FSDirectory
          .getDirectory(ConfigHandler.indexPath));
      reader = IndexReader.open(ConfigHandler.indexPath);

      searcher = new IndexSearcher(reader);
      analyzer = new StandardAnalyzer();
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }

  public TopDocCollectorSearchResult searchByScore(String queryStr,
      int startFrom, String operator) {

    try {
      queryStr = queryStr.trim();
      QueryParser parser = new QueryParser("contents", analyzer);
      if (QueryParser.AND_OPERATOR.toString().equalsIgnoreCase(operator)){
        parser.setDefaultOperator(QueryParser.AND_OPERATOR);
      } else {
        parser.setDefaultOperator(QueryParser.OR_OPERATOR);
      }
      Query query;
      query = parser.parse(queryStr);
      TopDocCollector collector = doPagingSearch(query, startFrom);
      TopDocCollectorSearchResult result = new TopDocCollectorSearchResult(
          collector, searcher);
      return result;
    } catch (ParseException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }

    return null;

    // System.out.println("Searching for: " + query.toString("contents"));

    // doPagingSearch(in, searcher, query, hitsPerPage, raw, queries ==
    // null);

    // }
    // reader.close();
  }

  public TopFieldDocsSearchResult searchBySession(String queryStr,
      int startFrom, String operator) {

    try {
      queryStr = queryStr.trim();
      QueryParser parser = new QueryParser("contents", analyzer);
      Operator op = QueryParser.AND_OPERATOR;
      if (QueryParser.AND_OPERATOR.toString().equalsIgnoreCase(operator)){
        parser.setDefaultOperator(QueryParser.AND_OPERATOR);
      } else {
        parser.setDefaultOperator(QueryParser.OR_OPERATOR);
      }
     
      Query query;
      query = parser.parse(queryStr);
      Sort sort = new Sort("summary",true);
           
      TopFieldDocs tfd = searcher.search(query,null,startFrom+10,sort);
      TopFieldDocsSearchResult result = new TopFieldDocsSearchResult(
          tfd, searcher);
      return result;
    } catch (ParseException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }

    return null;

   
  }

  public void finishSearch() {
    try {
      reader.close();
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }

  public static Search getInstance() {
    if (instance == null) {
      instance = new Search();
    }
    return instance;
  }

  private TopDocCollector doPagingSearch(Query query, int startFrom)
      throws IOException {

    TopDocCollector collector = new TopDocCollector(startFrom + 10);
    searcher.search(query, collector);
    if (logger.isDebugEnabled()) {
      logger.debug(query.toString());
      logger.debug(collector.toString());
    }

    return collector;
  }

  public class TopDocCollectorSearchResult {
    private TopDocCollector collector;
    private Searcher searcher;

    public TopDocCollectorSearchResult(TopDocCollector collector,
        Searcher searcher) {
      this.collector = collector;
      this.searcher = searcher;
    }

    public TopDocCollector getCollector() {
      return collector;
    }

    public Searcher getSearcher() {
      return searcher;
    }

  }

  public class TopFieldDocsSearchResult {
    private TopFieldDocs topFieldDocs;
    private Searcher searcher;

    public TopFieldDocsSearchResult(TopFieldDocs tfd,
        Searcher searcher) {
      this.topFieldDocs = tfd;
      this.searcher = searcher;
    }

    public TopFieldDocs getTopFieldDocs() {
      return topFieldDocs;
    }

    public Searcher getSearcher() {
      return searcher;
    }

  }
}
TOP

Related Classes of org.bigbluebutton.webminer.search.Search$TopFieldDocsSearchResult

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.