James Moger
2012-07-12 87ee944282f3c7191eed900e498cca20fc34fe98
src/com/gitblit/LuceneExecutor.java
@@ -105,7 +105,7 @@
public class LuceneExecutor implements Runnable {
   
      
   private static final int INDEX_VERSION = 3;
   private static final int INDEX_VERSION = 4;
   private static final String FIELD_OBJECT_TYPE = "type";
   private static final String FIELD_ISSUE = "issue";
@@ -301,7 +301,6 @@
         throw new RuntimeException(e);
      }
   }
   
   /**
    * Returns the author for the commit, if this information is available.
@@ -728,8 +727,9 @@
    * @param repositoryName
    * @param issueId
    * @throws Exception
    * @return true, if deleted, false if no record was deleted
    */
   private void deleteIssue(String repositoryName, String issueId) throws Exception {
   private boolean deleteIssue(String repositoryName, String issueId) throws Exception {
      BooleanQuery query = new BooleanQuery();
      Term objectTerm = new Term(FIELD_OBJECT_TYPE, SearchObjectType.issue.name());
      query.add(new TermQuery(objectTerm), Occur.MUST);
@@ -737,8 +737,17 @@
      query.add(new TermQuery(issueidTerm), Occur.MUST);
      
      IndexWriter writer = getIndexWriter(repositoryName);
      int numDocsBefore = writer.numDocs();
      writer.deleteDocuments(query);
      writer.commit();
      int numDocsAfter = writer.numDocs();
      if (numDocsBefore == numDocsAfter) {
         logger.debug(MessageFormat.format("no records found to delete {0}", query.toString()));
         return false;
      } else {
         logger.debug(MessageFormat.format("deleted {0} records with {1}", numDocsBefore - numDocsAfter, query.toString()));
         return true;
      }
   }
   
   /**
@@ -748,19 +757,29 @@
    * @param branch
    * @param path
    * @throws Exception
    * @return true, if deleted, false if no record was deleted
    */
   private void deleteBlob(String repositoryName, String branch, String path) throws Exception {
      BooleanQuery query = new BooleanQuery();
      Term objectTerm = new Term(FIELD_OBJECT_TYPE, SearchObjectType.blob.name());
      query.add(new TermQuery(objectTerm), Occur.MUST);
      Term branchTerm = new Term(FIELD_BRANCH, branch);
      query.add(new TermQuery(branchTerm), Occur.MUST);
      Term pathTerm = new Term(FIELD_PATH, path);
      query.add(new TermQuery(pathTerm), Occur.MUST);
   public boolean deleteBlob(String repositoryName, String branch, String path) throws Exception {
      String pattern = MessageFormat.format("{0}:'{'0} AND {1}:\"'{'1'}'\" AND {2}:\"'{'2'}'\"", FIELD_OBJECT_TYPE, FIELD_BRANCH, FIELD_PATH);
      String q = MessageFormat.format(pattern, SearchObjectType.blob.name(), branch, path);
      
      BooleanQuery query = new BooleanQuery();
      StandardAnalyzer analyzer = new StandardAnalyzer(LUCENE_VERSION);
      QueryParser qp = new QueryParser(LUCENE_VERSION, FIELD_SUMMARY, analyzer);
      query.add(qp.parse(q), Occur.MUST);
      IndexWriter writer = getIndexWriter(repositoryName);
      writer.deleteDocuments(query);
      int numDocsBefore = writer.numDocs();
      writer.deleteDocuments(query);
      writer.commit();
      int numDocsAfter = writer.numDocs();
      if (numDocsBefore == numDocsAfter) {
         logger.debug(MessageFormat.format("no records found to delete {0}", query.toString()));
         return false;
      } else {
         logger.debug(MessageFormat.format("deleted {0} records with {1}", numDocsBefore - numDocsAfter, query.toString()));
         return true;
      }
   }
   /**
@@ -881,7 +900,9 @@
                  IssueModel issue = IssueUtils.getIssue(repository, issueId);
                  if (issue == null) {
                     // issue was deleted, remove from index
                     deleteIssue(model.name, issueId);
                     if (!deleteIssue(model.name, issueId)) {
                        logger.error(MessageFormat.format("Failed to delete issue {0} from Lucene index!", issueId));
                     }
                  } else {
                     // issue was updated
                     index(model.name, issue);
@@ -1119,7 +1140,7 @@
         qp = new QueryParser(LUCENE_VERSION, FIELD_CONTENT, analyzer);
         qp.setAllowLeadingWildcard(true);
         query.add(qp.parse(text), Occur.SHOULD);
         IndexSearcher searcher;
         if (repositories.length == 1) {
            // single repository search
@@ -1135,7 +1156,10 @@
            MultiSourceReader reader = new MultiSourceReader(rdrs);
            searcher = new IndexSearcher(reader);
         }
         Query rewrittenQuery = searcher.rewrite(query);
         logger.debug(rewrittenQuery.toString());
         TopScoreDocCollector collector = TopScoreDocCollector.create(5000, true);
         searcher.search(rewrittenQuery, collector);
         int offset = Math.max(0, (page - 1) * pageSize);