List of usage examples for org.apache.lucene.search BooleanQuery BooleanQuery
BooleanQuery
From source file:com.liferay.portal.search.lucene.LuceneHelperImpl.java
License:Open Source License
public void addRequiredTerm(BooleanQuery booleanQuery, String field, String[] values, boolean like) { if (values == null) { return;/* w ww . j a v a 2 s. co m*/ } BooleanQuery query = new BooleanQuery(); for (String value : values) { addTerm(query, field, value, like); } booleanQuery.add(query, BooleanClause.Occur.MUST); }
From source file:com.liferay.portal.search.solr.internal.filter.BooleanFilterTranslatorImpl.java
License:Open Source License
@Override public org.apache.lucene.search.Query translate(BooleanFilter booleanFilter, FilterVisitor<org.apache.lucene.search.Query> filterVisitor) { BooleanQuery booleanQuery = new BooleanQuery(); for (BooleanClause<Filter> booleanClause : booleanFilter.getMustBooleanClauses()) { org.apache.lucene.search.Query luceneQuery = translate(booleanClause, filterVisitor); booleanQuery.add(luceneQuery, org.apache.lucene.search.BooleanClause.Occur.MUST); }/*w w w. j a v a 2 s. c o m*/ for (BooleanClause<Filter> booleanClause : booleanFilter.getMustNotBooleanClauses()) { org.apache.lucene.search.Query luceneQuery = translate(booleanClause, filterVisitor); booleanQuery.add(luceneQuery, org.apache.lucene.search.BooleanClause.Occur.MUST_NOT); } for (BooleanClause<Filter> booleanClause : booleanFilter.getShouldBooleanClauses()) { org.apache.lucene.search.Query luceneQuery = translate(booleanClause, filterVisitor); booleanQuery.add(luceneQuery, org.apache.lucene.search.BooleanClause.Occur.SHOULD); } return booleanQuery; }
From source file:com.liferay.portal.search.solr.internal.filter.ExistsFilterTranslatorImpl.java
License:Open Source License
@Override public org.apache.lucene.search.Query translate(ExistsFilter existsFilter) { BooleanQuery booleanQuery = new BooleanQuery(); MatchAllDocsQuery matchAllDocsQuery = new MatchAllDocsQuery(); booleanQuery.add(matchAllDocsQuery, BooleanClause.Occur.SHOULD); TermRangeQuery termRangeQuery = TermRangeQuery.newStringRange(existsFilter.getField(), "*", "*", true, true);/*from w w w. j a v a 2 s. c om*/ booleanQuery.add(termRangeQuery, BooleanClause.Occur.MUST); return booleanQuery; }
From source file:com.liferay.portal.search.solr.internal.filter.MissingFilterTranslatorImpl.java
License:Open Source License
@Override public org.apache.lucene.search.Query translate(MissingFilter missingFilter) { BooleanQuery booleanQuery = new BooleanQuery(); MatchAllDocsQuery matchAllDocsQuery = new MatchAllDocsQuery(); booleanQuery.add(matchAllDocsQuery, BooleanClause.Occur.SHOULD); TermRangeQuery termRangeQuery = TermRangeQuery.newStringRange(missingFilter.getField(), "*", "*", true, true);// w w w .j ava 2s . co m booleanQuery.add(termRangeQuery, BooleanClause.Occur.MUST_NOT); return booleanQuery; }
From source file:com.liferay.portal.search.solr.internal.filter.TermsFilterTranslatorImpl.java
License:Open Source License
@Override public org.apache.lucene.search.Query translate(TermsFilter termsFilter) { BooleanQuery booleanQuery = new BooleanQuery(); String field = termsFilter.getField(); for (String value : termsFilter.getValues()) { Term term = new Term(field, value); TermQuery termQuery = new TermQuery(term); if (termsFilter.getExecution() == TermsFilter.Execution.AND) { booleanQuery.add(termQuery, BooleanClause.Occur.MUST); } else {/* w w w . j a va 2 s. c om*/ booleanQuery.add(termQuery, BooleanClause.Occur.SHOULD); } } return booleanQuery; }
From source file:com.liferay.portal.search.solr.internal.query.MultiMatchQueryTranslatorImpl.java
License:Open Source License
@Override public org.apache.lucene.search.Query translate(MultiMatchQuery multiMatchQuery) { BooleanQuery booleanQuery = new BooleanQuery(); MultiMatchQuery.Type multiMatchQueryType = multiMatchQuery.getType(); Map<String, Float> fieldBoosts = multiMatchQuery.getFieldsBoosts(); for (String field : multiMatchQuery.getFields()) { Term term = new Term(field, multiMatchQuery.getValue()); Query query = null;//from w w w . ja v a 2 s .com if (multiMatchQueryType == MultiMatchQuery.Type.PHRASE) { PhraseQuery phraseQuery = new PhraseQuery(); phraseQuery.add(term); if (multiMatchQuery.getSlop() != null) { phraseQuery.setSlop(multiMatchQuery.getSlop()); } query = phraseQuery; } else if (multiMatchQueryType == MultiMatchQuery.Type.PHRASE_PREFIX) { query = new PrefixQuery(term); } else { query = new TermQuery(term); } if (fieldBoosts.containsKey(field)) { Float fieldBoost = fieldBoosts.get(field); query.setBoost(fieldBoost); } booleanQuery.add(query, BooleanClause.Occur.SHOULD); } return booleanQuery; }
From source file:com.liusoft.dlog4j.search.SearchProxy.java
License:Open Source License
/** * ?//from ww w . j a va2 s .c o m * @param params * @return * @throws Exception */ public static List search(SearchParameter params) throws Exception { if (params == null) return null; SearchEnabled searching = (SearchEnabled) params.getSearchObject().newInstance(); StringBuffer path = new StringBuffer(_baseIndexPath); path.append(searching.name()); File f = new File(path.toString()); if (!f.exists()) return null; IndexSearcher searcher = new IndexSearcher(path.toString()); //? BooleanQuery comboQuery = new BooleanQuery(); int _query_count = 0; StringTokenizer st = new StringTokenizer(params.getSearchKey()); while (st.hasMoreElements()) { String q = st.nextToken(); String[] indexFields = searching.getIndexFields(); for (int i = 0; i < indexFields.length; i++) { QueryParser qp = new QueryParser(indexFields[i], analyzer); try { Query subjectQuery = qp.parse(q); comboQuery.add(subjectQuery, BooleanClause.Occur.SHOULD); _query_count++; } catch (Exception e) { log.error("Add query parameter failed. key=" + q, e); } } } if (_query_count == 0)//? return null; //?? MultiFilter multiFilter = null; HashMap conds = params.getConditions(); if (conds != null) { Iterator keys = conds.keySet().iterator(); while (keys.hasNext()) { if (multiFilter == null) multiFilter = new MultiFilter(0); String key = (String) keys.next(); multiFilter.add(new FieldFilter(key, conds.get(key).toString())); } } /* * Creates a sort, possibly in reverse, * by terms in the given field with the type of term values explicitly given. */ SortField[] s_fields = new SortField[2]; s_fields[0] = SortField.FIELD_SCORE; s_fields[1] = new SortField(searching.getKeywordField(), SortField.INT, true); Sort sort = new Sort(s_fields); Hits hits = searcher.search(comboQuery, multiFilter, sort); int numResults = hits.length(); //System.out.println(numResults + " found............................"); int result_count = Math.min(numResults, MAX_RESULT_COUNT); List results = new ArrayList(result_count); for (int i = 0; i < result_count; i++) { Document doc = (Document) hits.doc(i); //Java Object result = params.getSearchObject().newInstance(); Enumeration fields = doc.fields(); while (fields.hasMoreElements()) { Field field = (Field) fields.nextElement(); //System.out.println(field.name()+" -- "+field.stringValue()); if (CLASSNAME_FIELD.equals(field.name())) continue; //? if (!field.isStored()) continue; //System.out.println("=========== begin to mapping ============"); //String --> anything Class fieldType = getNestedPropertyType(result, field.name()); //System.out.println(field.name()+", class = " + fieldType.getName()); Object fieldValue = null; if (fieldType.equals(Date.class)) fieldValue = new Date(Long.parseLong(field.stringValue())); else fieldValue = ConvertUtils.convert(field.stringValue(), fieldType); //System.out.println(fieldValue+", class = " + fieldValue.getClass().getName()); setNestedProperty(result, field.name(), fieldValue); } results.add(result); } return results; }
From source file:com.luc.searcher.LuceneFileSearcher.java
License:Apache License
public List<String> search(File indexDir, String query) throws IOException, ParseException { list = new ArrayList<String>(); dir = new SimpleFSDirectory(indexDir, null); pQuery = new PhraseQuery(); String[] splittedQuery = query.split(" "); /*/*from w w w .ja v a2 s .c om*/ * Build a Phrase Query */ for (int i = 0; i < splittedQuery.length; i++) { pQuery.add(new Term("contents", splittedQuery[i])); } pQuery.setSlop(5); indexSearcher = new IndexSearcher(dir); /* * Call query parser to generate search query */ qp = new QueryParser(Version.LUCENE_35, "contents", new StandardAnalyzer(Version.LUCENE_35)); q = qp.parse(query); /* * create a boolean query using phrase query and output of query parser to get a query for better outputs */ bQuery = new BooleanQuery(); bQuery.add(q, BooleanClause.Occur.SHOULD); bQuery.add(pQuery, BooleanClause.Occur.SHOULD); /* * Retrive files Matching the query */ TopDocs topDocs = indexSearcher.search(bQuery, 10); for (int i = 0; i < topDocs.totalHits; i++) { ScoreDoc match = topDocs.scoreDocs[i]; Document doc = indexSearcher.doc(match.doc); list.add(doc.get("filename")); /* System.out.println(doc.get("filename")); */ } return list; }
From source file:com.mathworks.xzheng.advsearching.BooksLikeThis.java
License:Apache License
public Document[] docsLike(int id, int max) throws IOException { Document doc = reader.document(id); String[] authors = doc.getValues("author"); BooleanQuery authorQuery = new BooleanQuery(); // #3 for (String author : authors) { // #3 authorQuery.add(new TermQuery(new Term("author", author)), // #3 BooleanClause.Occur.SHOULD); // #3 }//from ww w . j a va 2 s . co m authorQuery.setBoost(2.0f); Terms terms = reader.getTermVector(id, "subject"); // #4 BooleanQuery subjectQuery = new BooleanQuery(); // #4 TermsEnum termsEnum = terms.iterator(null); BytesRef text; while ((text = termsEnum.next()) != null) { // #4 TermQuery tq = new TermQuery( // #4 new Term("subject", text.utf8ToString())); // #4 subjectQuery.add(tq, BooleanClause.Occur.SHOULD); // #4 } BooleanQuery likeThisQuery = new BooleanQuery(); // #5 likeThisQuery.add(authorQuery, BooleanClause.Occur.SHOULD); // #5 likeThisQuery.add(subjectQuery, BooleanClause.Occur.SHOULD); // #5 likeThisQuery.add(new TermQuery( // #6 new Term("isbn", doc.get("isbn"))), BooleanClause.Occur.MUST_NOT); // #6 // System.out.println(" Query: " + // likeThisQuery.toString("contents")); TopDocs hits = searcher.search(likeThisQuery, 10); int size = max; if (max > hits.scoreDocs.length) size = hits.scoreDocs.length; Document[] docs = new Document[size]; for (int i = 0; i < size; i++) { docs[i] = reader.document(hits.scoreDocs[i].doc); } return docs; }
From source file:com.mathworks.xzheng.advsearching.SortingExample.java
License:Apache License
public static void main(String[] args) throws Exception { Query allBooks = new MatchAllDocsQuery(); QueryParser parser = new QueryParser(Version.LUCENE_46, // #1 "contents", // #1 new StandardAnalyzer( // #1 Version.LUCENE_46)); // #1 BooleanQuery query = new BooleanQuery(); // #1 query.add(allBooks, BooleanClause.Occur.SHOULD); // #1 query.add(parser.parse("java OR action"), BooleanClause.Occur.SHOULD); // #1 Directory directory = TestUtil.getBookIndexDirectory(); // #2 SortingExample example = new SortingExample(directory); // #2 example.displayResults(query, Sort.RELEVANCE); example.displayResults(query, Sort.INDEXORDER); example.displayResults(query, new Sort(new SortField("category", SortField.STRING))); example.displayResults(query, new Sort(new SortField("pubmonth", SortField.INT, true))); example.displayResults(query, new Sort(new SortField("category", SortField.STRING), SortField.FIELD_SCORE, new SortField("pubmonth", SortField.INT, true))); example.displayResults(query,// www . j a va 2 s .c o m new Sort(new SortField[] { SortField.FIELD_SCORE, new SortField("category", SortField.STRING) })); directory.close(); }