List of usage examples for org.apache.lucene.search BooleanQuery BooleanQuery
BooleanQuery
From source file:com.vmware.dcp.services.common.LuceneBlobIndexService.java
License:Open Source License
private void applyBlobRetentionPolicy(Query linkQuery, long updateTime) throws IOException { IndexWriter wr = this.writer; if (wr == null) { return;//from www. j av a 2 s . c o m } if (!this.indexOptions.contains(BlobIndexOption.SINGLE_USE_KEYS)) { return; } BooleanQuery bq = new BooleanQuery(); bq.add(linkQuery, Occur.MUST); NumericRangeQuery<Long> timeQuery = NumericRangeQuery.newLongRange(URI_PARAM_NAME_UPDATE_TIME, null, updateTime, false, true); bq.add(timeQuery, Occur.MUST); wr.deleteDocuments(linkQuery); this.indexUpdateTimeMicros = Utils.getNowMicrosUtc(); }
From source file:com.vmware.dcp.services.common.LuceneDocumentIndexService.java
License:Open Source License
/** * Augment the query argument with the resource group query specified * by the operation's authorization context. * * If the operation was executed by the system user, the query argument * is returned unmodified.//from w ww . ja v a 2s . com * * If no query needs to be executed return null * * @return Augmented query. */ private Query updateQuery(Operation op, Query tq) { Query rq = null; AuthorizationContext ctx = op.getAuthorizationContext(); // Allow operation if isAuthorizationEnabled is set to false if (!this.getHost().isAuthorizationEnabled()) { return tq; } if (ctx == null) { // Don't allow operation if no authorization context and auth is enabled return null; } // Allow unconditionally if this is the system user if (ctx.isSystemUser()) { return tq; } // If the resource query in the authorization context is unspecified, // use a Lucene query that doesn't return any documents so that every // result will be empty. if (ctx.getResourceQuery() == null) { rq = new MatchNoDocsQuery(); } else { rq = LuceneQueryConverter.convertToLuceneQuery(ctx.getResourceQuery()); } BooleanQuery bq = new BooleanQuery(); bq.add(rq, Occur.FILTER); bq.add(tq, Occur.FILTER); return bq; }
From source file:com.vmware.dcp.services.common.LuceneDocumentIndexService.java
License:Open Source License
/** * Deletes all indexed documents with range of deleteCount,indexed with the specified self link * * @throws Throwable/*from w w w . ja v a2 s .co m*/ */ private void deleteDocumentsFromIndex(Operation delete, String link, SelfLinkInfo info, long versionsToKeep) throws Throwable { IndexWriter wr = this.writer; if (wr == null) { delete.fail(new CancellationException()); return; } Query linkQuery = new TermQuery(new Term(ServiceDocument.FIELD_NAME_SELF_LINK, link)); IndexSearcher s = updateSearcher(link, Integer.MAX_VALUE, wr); if (s == null) { delete.fail(new CancellationException()); return; } TopDocs results; results = s.search(linkQuery, Integer.MAX_VALUE, this.versionSort, false, false); if (results == null) { return; } ScoreDoc[] hits = results.scoreDocs; if (hits == null || hits.length == 0) { return; } Document hitDoc = s.doc(hits[0].doc); if (versionsToKeep == 0) { // we are asked to delete everything, no need to sort or query this.selfLinks.remove(link); wr.deleteDocuments(linkQuery); this.indexUpdateTimeMicros = Utils.getNowMicrosUtc(); delete.complete(); return; } if (hits.length < versionsToKeep) { return; } BooleanQuery bq = new BooleanQuery(); // grab the document at the tail of the results, and use it to form a new query // that will delete all documents from that document up to the version at the // retention // limit hitDoc = s.doc(hits[hits.length - 1].doc); long versionLowerBound = Long.parseLong(hitDoc.get(ServiceDocument.FIELD_NAME_VERSION)); hitDoc = s.doc(hits[(int) versionsToKeep - 1].doc); long versionUpperBound = Long.parseLong(hitDoc.get(ServiceDocument.FIELD_NAME_VERSION)); NumericRangeQuery<Long> versionQuery = NumericRangeQuery.newLongRange(ServiceDocument.FIELD_NAME_VERSION, versionLowerBound, versionUpperBound, true, true); bq.add(versionQuery, Occur.MUST); bq.add(linkQuery, Occur.MUST); results = s.search(bq, Integer.MAX_VALUE); long now = Utils.getNowMicrosUtc(); logInfo("trimming index for %s from %d to %d, query returned %d", link, hits.length, versionsToKeep, results.totalHits); wr.deleteDocuments(bq); if (info != null) { info.updateMicros = now; } this.indexUpdateTimeMicros = now; delete.complete(); }
From source file:com.vmware.dcp.services.common.LuceneQueryConverter.java
License:Open Source License
static Query convertToLuceneBooleanQuery(QueryTask.Query query) { BooleanQuery parentQuery = new BooleanQuery(); // Recursively build the boolean query. We allow arbitrary nesting and grouping. for (QueryTask.Query q : query.booleanClauses) { buildBooleanQuery(parentQuery, q); }/*w w w . jav a 2s . c o m*/ return parentQuery; }
From source file:com.xpn.xwiki.plugin.lucene.GlobalIndexUpdater.java
License:Open Source License
private void deleteDocFromIndex(Document doc) throws Exception { BooleanQuery bq = new BooleanQuery(); Query q1 = queryParser.parse("hostname:" + doc.get("hostname")); bq.add(q1, BooleanClause.Occur.MUST); TermQuery q2 = new TermQuery(new Term("_docid", doc.get("_docid"))); bq.add(q2, BooleanClause.Occur.MUST); Hits hits = getHits(bq);//from w w w. j a v a2s.c o m if (hits.length() > 0) { try { deleteFromIndex(hits.id(0)); } catch (Exception e) { } } }
From source file:com.xpn.xwiki.plugin.lucene.IndexRebuilder.java
License:Open Source License
public boolean isIndexed(DocumentReference documentReference, String version, String language, Searcher searcher) {//from w w w. j a v a2s . c om boolean exists = false; BooleanQuery query = new BooleanQuery(); query.add(new TermQuery(new Term(IndexFields.DOCUMENT_NAME, documentReference.getName().toLowerCase())), BooleanClause.Occur.MUST); query.add( new TermQuery(new Term(IndexFields.DOCUMENT_SPACE, documentReference.getLastSpaceReference().getName().toLowerCase())), BooleanClause.Occur.MUST); query.add(new TermQuery( new Term(IndexFields.DOCUMENT_WIKI, documentReference.getWikiReference().getName().toLowerCase())), BooleanClause.Occur.MUST); if (version != null) { query.add(new TermQuery(new Term(IndexFields.DOCUMENT_VERSION, version)), BooleanClause.Occur.MUST); } if (language != null) { query.add(new TermQuery( new Term(IndexFields.DOCUMENT_LANGUAGE, StringUtils.isEmpty(language) ? "default" : language)), BooleanClause.Occur.MUST); } try { TopDocs topDocs = searcher.search(query, 1); exists = topDocs.totalHits == 1; } catch (IOException e) { LOG.error("Faild to search for page [" + documentReference + "] in Lucene index", e); } return exists; }
From source file:com.xpn.xwiki.plugin.lucene.internal.IndexRebuilder.java
License:Open Source License
public boolean isIndexed(DocumentReference documentReference, String version, String language, IndexSearcher searcher) {/* w ww. j a v a 2 s . c om*/ boolean exists = false; BooleanQuery query = new BooleanQuery(); query.add(new TermQuery(new Term(IndexFields.DOCUMENT_NAME, documentReference.getName().toLowerCase())), BooleanClause.Occur.MUST); query.add( new TermQuery(new Term(IndexFields.DOCUMENT_SPACE, documentReference.getLastSpaceReference().getName().toLowerCase())), BooleanClause.Occur.MUST); query.add(new TermQuery( new Term(IndexFields.DOCUMENT_WIKI, documentReference.getWikiReference().getName().toLowerCase())), BooleanClause.Occur.MUST); if (version != null) { query.add(new TermQuery(new Term(IndexFields.DOCUMENT_VERSION, version)), BooleanClause.Occur.MUST); } if (language != null) { query.add(new TermQuery( new Term(IndexFields.DOCUMENT_LANGUAGE, StringUtils.isEmpty(language) ? "default" : language)), BooleanClause.Occur.MUST); } try { TopDocs topDocs = searcher.search(query, 1); exists = topDocs.totalHits == 1; } catch (IOException e) { LOGGER.error("Faild to search for page [{}] in Lucene index", documentReference, e); } return exists; }
From source file:com.xpn.xwiki.plugin.lucene.LucenePlugin.java
License:Open Source License
/** * @param query//from w ww. ja va2 s . c o m * @param virtualWikiNames comma separated list of virtual wiki names * @param languages comma separated list of language codes to search in, may be null to search * all languages */ private Query buildQuery(String query, String virtualWikiNames, String languages) throws ParseException { // build a query like this: <user query string> AND <wikiNamesQuery> AND // <languageQuery> BooleanQuery bQuery = new BooleanQuery(); Query parsedQuery = null; // for object search if (query.startsWith("PROP ")) { String property = query.substring(0, query.indexOf(":")); query = query.substring(query.indexOf(":") + 1, query.length()); QueryParser qp = new QueryParser(property, analyzer); parsedQuery = qp.parse(query); bQuery.add(parsedQuery, BooleanClause.Occur.MUST); } else if (query.startsWith("MULTI ")) { // for fulltext search List<String> fieldList = IndexUpdater.fields; String[] fields = fieldList.toArray(new String[fieldList.size()]); BooleanClause.Occur[] flags = new BooleanClause.Occur[fields.length]; for (int i = 0; i < flags.length; i++) { flags[i] = BooleanClause.Occur.SHOULD; } parsedQuery = MultiFieldQueryParser.parse(query, fields, flags, analyzer); bQuery.add(parsedQuery, BooleanClause.Occur.MUST); } else { QueryParser qp = new QueryParser("ft", analyzer); parsedQuery = qp.parse(query); bQuery.add(parsedQuery, BooleanClause.Occur.MUST); } if (virtualWikiNames != null && virtualWikiNames.length() > 0) { bQuery.add(buildOredTermQuery(virtualWikiNames, IndexFields.DOCUMENT_WIKI), BooleanClause.Occur.MUST); } if (languages != null && languages.length() > 0) { bQuery.add(buildOredTermQuery(languages, IndexFields.DOCUMENT_LANGUAGE), BooleanClause.Occur.SHOULD); } return bQuery; }
From source file:com.xpn.xwiki.plugin.lucene.LucenePlugin.java
License:Open Source License
/** * @param values comma separated list of values to look for * @return A query returning documents matching one of the given values in the given field *//*ww w .j a v a 2 s . c om*/ private Query buildOredTermQuery(final String values, final String fieldname) { String[] valueArray = values.split("\\,"); if (valueArray.length > 1) { // build a query like this: <valueArray[0]> OR <valueArray[1]> OR ... BooleanQuery orQuery = new BooleanQuery(); for (int i = 0; i < valueArray.length; i++) { orQuery.add(new TermQuery(new Term(fieldname, valueArray[i].trim())), BooleanClause.Occur.SHOULD); } return orQuery; } // exactly one value, no OR'ed Terms necessary return new TermQuery(new Term(fieldname, valueArray[0])); }
From source file:com.Yasna.forum.database.DbQuery.java
License:Open Source License
/** * Execute the query and store the results in the results array. *///from ww w . jav a2 s.co m private void executeQuery() { try { Searcher searcher = getSearcher(); if (searcher == null) { //Searcher can be null if the index doesn't exist. results = new int[0]; return; } org.apache.lucene.search.Query bodyQuery = QueryParser.parse(queryString, "body", analyzer); org.apache.lucene.search.Query subjectQuery = QueryParser.parse(queryString, "subject", analyzer); String forumID = Integer.toString(forum.getID()); BooleanQuery comboQuery = new BooleanQuery(); comboQuery.add(subjectQuery, false, false); comboQuery.add(bodyQuery, false, false); MultiFilter multiFilter = new MultiFilter(3); //Forum filter multiFilter.add(new FieldFilter("forumID", forumID)); //Date filter if (beforeDate != null || afterDate != null) { if (beforeDate != null && afterDate != null) { multiFilter.add(new DateFilter("creationDate", beforeDate, afterDate)); } else if (beforeDate == null) { multiFilter.add(DateFilter.After("creationDate", afterDate)); } else { multiFilter.add(DateFilter.Before("creationDate", beforeDate)); } } //User filter if (user != null) { String userID = Integer.toString(user.getID()); multiFilter.add(new FieldFilter("userID", userID)); } //Thread filter if (thread != null) { String threadID = Integer.toString(thread.getID()); multiFilter.add(new FieldFilter("threadID", threadID)); } Hits hits = searcher.search(comboQuery, multiFilter); //Don't return more search results than the maximum number allowed. int numResults = hits.length() < MAX_RESULTS_SIZE ? hits.length() : MAX_RESULTS_SIZE; int[] messages = new int[numResults]; for (int i = 0; i < numResults; i++) { messages[i] = Integer.parseInt(((Document) hits.doc(i)).get("messageID")); } results = messages; } catch (Exception e) { e.printStackTrace(); results = new int[0]; } }