List of usage examples for org.apache.lucene.search BooleanQuery BooleanQuery
BooleanQuery
From source file:com.andreig.jetty.Search.java
License:GNU General Public License
private static Query add_dbid(Query q2, String dbid) { BooleanQuery bq = new BooleanQuery(); Term t = new Term("_dbid_", dbid); Query q = new TermQuery(t); bq.add(q, Occur.MUST);/*from w ww.j a va 2s . c o m*/ bq.add(q2, Occur.MUST); return bq; }
From source file:com.appeligo.amazon.AmazonSearcher.java
License:Apache License
public AmazonItem getProgramPurchases(String programId) { Searcher searcher = getProductSearcher(); BooleanQuery query = new BooleanQuery(); query.add(new BooleanClause(new TermQuery(new Term("programId", programId)), Occur.MUST)); query.add(new BooleanClause(new TermQuery(new Term("type", "product")), Occur.MUST)); AmazonItem item = null;/*from w w w .j a v a2 s .c o m*/ try { Hits hits = searcher.search(query); if (hits.length() > 0) { item = createItem(hits.doc(0)); } } catch (IOException e) { if (log.isWarnEnabled()) { log.warn("Error searching for program purchase: " + programId, e); } } return item; }
From source file:com.appeligo.search.actions.SearchResults.java
License:Apache License
private Query generateLuceneQuery(String givenQuery, IndexSearcher searcher) throws ParseException { if (givenQuery == null) { givenQuery = getQuery();/*from w ww .java 2 s .c om*/ } HashMap<String, Float> boost = new HashMap<String, Float>(); boost.put("programTitle", 8.0f); boost.put("episodeTitle", 3.0f); boost.put("description", 2.0f); MultiFieldQueryParser parser = new MultiFieldQueryParser( new String[] { "text", "description", "programTitle", "episodeTitle", "credits", "genre" }, analyzer, boost); parser.setDefaultOperator(Operator.AND); Query luceneQuery = null; try { luceneQuery = parser.parse(givenQuery); } catch (ParseException e) { log.error("Error parsing query for : " + givenQuery); if (log.isDebugEnabled()) { log.debug("Error parsing query for : " + givenQuery, e); } givenQuery = QueryParser.escape(givenQuery); luceneQuery = parser.parse(givenQuery); } BooleanQuery combinedQuery = new BooleanQuery(); combinedQuery.add(luceneQuery, Occur.MUST); //This will move into a setting on the user. Query tvma = new TermQuery(new Term("tvRating", "TVMA")); combinedQuery.add(tvma, Occur.MUST_NOT); if (lineup != null) { //Only find programs that were on networks that are in the lineup TermQuery lineupQuery = new TermQuery(new Term("lineup-" + lineup, "true")); combinedQuery.add(lineupQuery, Occur.MUST); } if (searchType != null) { if (lineup == null) { throw new ParseException( "Lineup cannot be null if searching based on date. searchType=" + searchType); } switch (searchType) { case FUTURE: { Calendar cal = Calendar.getInstance(); cal.add(Calendar.DAY_OF_YEAR, 14); Date future = cal.getTime(); Date now = new Date(); ConstantScoreRangeQuery dateQuery = new ConstantScoreRangeQuery("lineup-" + lineup + "-endTime", DateTools.dateToString(now, DateTools.Resolution.MINUTE), DateTools.dateToString(future, DateTools.Resolution.MINUTE), true, true); combinedQuery.add(dateQuery, Occur.MUST); break; } case TODAY: { Calendar cal = Calendar.getInstance(); cal.set(Calendar.HOUR_OF_DAY, cal.getActualMaximum(Calendar.HOUR_OF_DAY)); cal.set(Calendar.MINUTE, cal.getActualMaximum(Calendar.MINUTE)); Date future = cal.getTime(); Date now = new Date(); ConstantScoreRangeQuery dateQuery = new ConstantScoreRangeQuery("lineup-" + lineup + "-endTime", DateTools.dateToString(now, DateTools.Resolution.MINUTE), DateTools.dateToString(future, DateTools.Resolution.MINUTE), true, true); combinedQuery.add(dateQuery, Occur.MUST); break; } } } if (modifiedSince != null) { Date now = new Date(); ConstantScoreRangeQuery dateQuery = new ConstantScoreRangeQuery("lastModified", DateTools.dateToString(modifiedSince, DateTools.Resolution.MINUTE), DateTools.dateToString(now, DateTools.Resolution.MINUTE), true, true); combinedQuery.add(dateQuery, Occur.MUST); } return combinedQuery; }
From source file:com.appspot.socialinquirer.server.service.impl.StackExchangeServiceImpl.java
License:Apache License
/** * Match with keywords./* www.java 2 s .co m*/ * * @param keywords the keywords * @param userText the user text * @return true, if successful */ public boolean matchWithKeywords(List<String> keywords, String userText) { MemoryIndex index = new MemoryIndex(); index.addField("text", userText, createEnglishAnalyzer()); QueryParser parser = new QueryParser("text", createEnglishAnalyzer()); BooleanQuery query = new BooleanQuery(); for (String keyword : keywords) { try { query.add(parser.parse(keyword), BooleanClause.Occur.SHOULD); } catch (ParseException e) { } } float score = index.search(query); return score > 0.0f; }
From source file:com.aurel.track.lucene.search.listFields.ExternalListSearcher.java
License:Open Source License
/** * Gets the lucene query when no field is specified * @param analyzer/*from w w w .j ava 2 s . co m*/ * @param toBeProcessedString * @param fieldID * @param locale * @return */ @Override protected Query getNoExlplicitFieldQuery(Analyzer analyzer, String toBeProcessedString, Locale locale) { List<Integer> fieldIDs = getFieldIDs(); if (fieldIDs != null && !fieldIDs.isEmpty()) { BooleanQuery booleanQuery = new BooleanQuery(); for (Integer fieldID : fieldIDs) { Query searchabelFieldQuery = getNoFieldQuerySearchableField(analyzer, toBeProcessedString, fieldID, locale); booleanQuery.add(searchabelFieldQuery, BooleanClause.Occur.SHOULD); } return booleanQuery; } return null; }
From source file:com.aurel.track.lucene.search.listFields.ExternalListSearcher.java
License:Open Source License
/** * Gets the lucene query when no field is specified * @param analyzer/* ww w . j ava 2 s . c o m*/ * @param toBeProcessedString * @param fieldID * @param locale * @return */ protected Query getNoFieldQuerySearchableField(Analyzer analyzer, String toBeProcessedString, Integer fieldID, Locale locale) { BooleanQuery booleanQuery = new BooleanQuery(); IExternalLookupLucene externalLookupField = (IExternalLookupLucene) FieldTypeManager .getFieldTypeRT(fieldID); String[] searchableFields = externalLookupField.getSearchableFieldNames(); if (searchableFields != null && searchableFields.length > 0) { for (String searchableField : searchableFields) { QueryParser queryParser = new QueryParser(searchableField, analyzer); Query externalLookupFieldQuery = null; String externalFieldQueryString = toBeProcessedString + " AND " + LuceneUtil.EXTERNAL_INDEX_FIELDS.FIELDID + LuceneSearcher.FIELD_NAME_VALUE_SEPARATOR + fieldID; try { externalLookupFieldQuery = queryParser.parse(toBeProcessedString); booleanQuery.add(externalLookupFieldQuery, BooleanClause.Occur.SHOULD); } catch (ParseException e) { LOGGER.error("Parsing the external lookups query string for fieldValue '" + externalFieldQueryString + "' failed with " + e.getMessage()); LOGGER.debug(ExceptionUtils.getStackTrace(e)); } } } return booleanQuery; }
From source file:com.aurel.track.lucene.search.LuceneSearcher.java
License:Open Source License
/** * Find the workItemIDs for a user entered query string * The userQueryString may or may not have explicit fields specified * The further processing depends very much on whether there is explicit field specified or not * @param userQueryString// w ww. j ava 2 s . co m * @param external whether track+ item search or wiki search * @param locale * @param highlightedTextMap * @return */ public static int[] searchWorkItems(String userQueryString, boolean external, Locale locale, Map<Integer, String> highlightedTextMap) throws ParseException, BooleanQuery.TooManyClauses { Analyzer analyzer = LuceneUtil.getAnalyzer(); if (userQueryString == null) { LOGGER.info("Query string is null"); return null; } else { LOGGER.debug("Query string is " + userQueryString); } List<TListTypeBean> documentTypesList = IssueTypeBL.loadAllDocumentTypes(); Set<Integer> documentTypeIDs = GeneralUtils.createIntegerSetFromBeanList(documentTypesList); String preprocessedQueryString = userQueryString; Query query = null; Query projectSpecificIDQuery = null; Map<String, Integer> compositeFieldIDByFieldName = new HashMap<String, Integer>(); Map<String, String> fieldLabelToFieldNameMap = new HashMap<String, String>(); List<String> fieldNames = getAllFieldNames(compositeFieldIDByFieldName, fieldLabelToFieldNameMap, locale); userQueryString = replaceFieldLabelsWithFieldNames(userQueryString, fieldLabelToFieldNameMap); if (fieldSpecified(userQueryString, fieldNames, compositeFieldIDByFieldName)) { //initialize the query with the SYNOPSIS as default field //queryParser = new QueryParser(LuceneUtil.getFieldName(SystemFields.SYNOPSYS), analyzer); //preprocess the query: // 1. by replacing the not localized lookup texts with the corresponding values: ex. Project:TryItOut -> Project:1 // 2. by replacing the localized lookup texts with the corresponding values: ex. Status:geschlossen -> Status:10 // 3. preprocess the localized date in lucene format. ex. EndDate:24.12.07 -> EndDate:20071224 // 4. preprocess the localized boolean value // 5. preprocess composite fields pc:p1#c11 -> pc#1:12 AND pc#2:21 // 6. replace the text found in an attachment with the ID(s) of the workItems the attachment belongs to preprocessedQueryString = preprocess(analyzer, userQueryString, locale); //set all direct text fields as default fields /*List<IntegerStringBean> directTextFieldNames = LuceneUtil.getFieldNamesForPreprocessType(LuceneUtil.PREPROCESSTYPES.DIRECT); String[] fieldNamesArr = new String[directTextFieldNames.size()]; for (int i = 0; i < directTextFieldNames.size(); i++) { fieldNamesArr[i] = directTextFieldNames.get(i).getLabel(); } BooleanClause.Occur[] orFlags = getOrFlagsArray(directTextFieldNames.size()); try { //initialize the query with all direct fields as default field query = MultiFieldQueryParser.parse(LuceneUtil.VERSION, preprocessedQueryString, fieldNamesArr, orFlags, analyzer); } catch (ParseException e) { LOGGER.error("Parsing without explicit field for workItem fields (MultiFieldQueryParser) failed with " + e.getMessage()); throw e; }*/ QueryParser queryParser = new QueryParser(LuceneUtil.getFieldName(SystemFields.ISSUENO), analyzer); try { query = queryParser.parse(preprocessedQueryString); } catch (ParseException e) { LOGGER.warn("Parsing explicit field for " + preprocessedQueryString + " field failed with " + e.getMessage()); LOGGER.debug(ExceptionUtils.getStackTrace(e)); throw e; } if (query != null && LOGGER.isDebugEnabled()) { LOGGER.debug("The preprocessed query: " + query.toString()); } Query itemTypeQuery = getItemTypeQuery(documentTypeIDs, analyzer); if (itemTypeQuery != null) { LOGGER.debug("The item type query: " + itemTypeQuery.toString()); BooleanClause.Occur occur = null; if (external) { occur = BooleanClause.Occur.MUST; } else { occur = BooleanClause.Occur.MUST_NOT; } BooleanQuery finalQuery = new BooleanQuery(); finalQuery.add(query, BooleanClause.Occur.MUST); finalQuery.add(itemTypeQuery, occur); query = finalQuery; } } else { if (isPossibleProjectSpecificID(userQueryString)) { TFieldBean fieldBean = FieldTypeManager.getInstance() .getFieldBean(SystemFields.INTEGER_PROJECT_SPECIFIC_ISSUENO); if (fieldBean != null) { String termField = fieldBean.getName(); Term term = new Term(termField, userQueryString); projectSpecificIDQuery = new TermQuery(term); int[] projSpecificIDResult = getQueryResults(projectSpecificIDQuery, userQueryString, preprocessedQueryString, highlightedTextMap); if (projSpecificIDResult != null && projSpecificIDResult.length > 0) { //return only if projectSpecific item numbers are found return projSpecificIDResult; } } } query = preprocessNoExplicitField(analyzer, userQueryString, documentTypeIDs, external, locale); preprocessedQueryString = query.toString(); } return getQueryResults(query, userQueryString, preprocessedQueryString, highlightedTextMap); }
From source file:com.aurel.track.lucene.search.LuceneSearcher.java
License:Open Source License
/** * Preprocess a userQueryString which do not have explicit field(s) specified * Uses some text fields as default fields but looks for the words * also in the other lookup indexes // w w w.jav a 2 s. c om * @param analyzer * @param toBeProcessedString a part of the user entered query string * @param locale * @return */ private static Query preprocessNoExplicitField(Analyzer analyzer, String toBeProcessedString, Set<Integer> itemTypeIDs, boolean external, Locale locale) throws ParseException { //direct workItem fields BooleanQuery finalQuery = new BooleanQuery(); BooleanClause.Occur[] orFlags; Query workItemDirectQuery = null; //initialize the QueryParser with text fields as default fields BooleanQuery workItemQuery = new BooleanQuery(); List<IntegerStringBean> directTextFieldNames = getFieldNamesForPreprocessType( LuceneUtil.PREPROCESSTYPES.DIRECT); String[] fieldNamesArr = new String[directTextFieldNames.size()]; for (int i = 0; i < directTextFieldNames.size(); i++) { fieldNamesArr[i] = directTextFieldNames.get(i).getLabel(); } orFlags = getOrFlagsArray(directTextFieldNames.size()); try { workItemDirectQuery = MultiFieldQueryParser.parse(toBeProcessedString, fieldNamesArr, orFlags, analyzer); } catch (ParseException e) { LOGGER.warn("Parsing without explicit field for workItem fields (MultiFieldQueryParser) failed with " + e.getMessage()); LOGGER.debug(ExceptionUtils.getStackTrace(e)); throw e; } catch (Exception e) { LOGGER.warn( "Parsing without explicit field for workItem fields (MultiFieldQueryParser) failed with throwable " + e.getMessage()); LOGGER.debug(ExceptionUtils.getStackTrace(e)); } //combine with or all occurrences LOOKUPENTITYTYPES if (workItemDirectQuery != null) { workItemQuery.add(workItemDirectQuery, BooleanClause.Occur.SHOULD); } List<ILookupFieldSearcher> lookupFieldSearchers = getLookupFieldSearchers(); for (ILookupFieldSearcher lookupFieldSearcher : lookupFieldSearchers) { Query query = lookupFieldSearcher.getNoExplicitFieldQuery(analyzer, toBeProcessedString, locale); if (query != null) { workItemQuery.add(query, BooleanClause.Occur.SHOULD); } } finalQuery.add(workItemQuery, BooleanClause.Occur.MUST); Query itemTypeQuery = getItemTypeQuery(itemTypeIDs, analyzer); if (itemTypeQuery != null) { LOGGER.debug("The item type query: " + itemTypeQuery.toString()); BooleanClause.Occur occur = null; if (external) { occur = BooleanClause.Occur.MUST; } else { occur = BooleanClause.Occur.MUST_NOT; } finalQuery.add(itemTypeQuery, occur); } return finalQuery; }
From source file:com.baidu.rigel.biplatform.tesseract.util.QueryRequestUtil.java
License:Open Source License
/** * //from ww w . j a v a 2 s . c o m * transQueryRequest2LuceneQuery queryRequest->query for lucene * * @param query * queryRequest * @return Query query for lucene * @throws ParseException * ? */ public static Query transQueryRequest2LuceneQuery(QueryRequest query) throws ParseException { if (query == null || query.getWhere() == null) { throw new IllegalArgumentException(); } BooleanQuery queryAll = new BooleanQuery(); BooleanQuery.setMaxClauseCount(Integer.MAX_VALUE); // process where // process and condition Map<String, List<String>> andCondition = transQueryRequestAndList2Map(query); for (String fieldName : andCondition.keySet()) { //QueryParser parser = new QueryParser(fieldName, new StandardAnalyzer()); BooleanQuery subQuery = new BooleanQuery(); for (String qs : andCondition.get(fieldName)) { subQuery.add(new TermQuery(new Term(fieldName, qs)), Occur.SHOULD); } queryAll.add(subQuery, Occur.MUST); } return queryAll; }
From source file:com.barchart.feed.ddf.resolver.provider.CodecHelper.java
License:BSD License
static Query buildQuerySimple(final String source) { final String[] termArray = source.split("\\s+"); final BooleanQuery query = new BooleanQuery(); for (final String termText : termArray) { final Term term = getBodyTerm(termText); if (hasWildcard(termText)) { AND(query, new WildcardQuery(term)); } else {/*from w w w .j ava 2s . c o m*/ AND(query, new PrefixQuery(term)); } } return query; }