List of usage examples for org.apache.lucene.util QueryBuilder QueryBuilder
public QueryBuilder(Analyzer analyzer)
From source file:antnlp.opie.indexsearch.SearchFiles.java
License:Apache License
/** Simple command-line based search demo. */ public static void main(String[] args) throws Exception { String usage = "Usage:\tjava org.apache.lucene.demo.SearchFiles [-index dir] [-field f] [-repeat n] [-queries file] [-query string] [-raw] [-paging hitsPerPage]\n\nSee http://lucene.apache.org/core/4_1_0/demo/ for details."; if (args.length > 0 && ("-h".equals(args[0]) || "-help".equals(args[0]))) { System.out.println(usage); System.exit(0);//from w w w . j a va 2s . c o m } String index = "index"; String field = "contents"; String queries = null; int repeat = 0; boolean raw = false; String queryString = null; int hitsPerPage = 10; for (int i = 0; i < args.length; i++) { if ("-index".equals(args[i])) { index = args[i + 1]; i++; } else if ("-field".equals(args[i])) { field = args[i + 1]; i++; } else if ("-queries".equals(args[i])) { queries = args[i + 1]; i++; } else if ("-query".equals(args[i])) { queryString = args[i + 1]; i++; } else if ("-repeat".equals(args[i])) { repeat = Integer.parseInt(args[i + 1]); i++; } else if ("-raw".equals(args[i])) { raw = true; } else if ("-paging".equals(args[i])) { hitsPerPage = Integer.parseInt(args[i + 1]); if (hitsPerPage <= 0) { System.err.println("There must be at least 1 hit per page."); System.exit(1); } i++; } } IndexReader reader = DirectoryReader.open(FSDirectory.open(Paths.get(index))); IndexSearcher searcher = new IndexSearcher(reader); //Analyzer analyzer = new StandardAnalyzer(); //Analyzer analyzer = new StandardAnalyzer(CharArraySet.EMPTY_SET); Analyzer analyzer = new WhitespaceAnalyzer(); BufferedReader in = null; if (queries != null) { in = Files.newBufferedReader(Paths.get(queries), StandardCharsets.UTF_8); } else { in = new BufferedReader(new InputStreamReader(System.in, StandardCharsets.UTF_8)); } //QueryParser parser = new QueryParser(field, analyzer); QueryBuilder builder = new QueryBuilder(analyzer); while (true) { if (queries == null && queryString == null) { // prompt the user System.out.println("Enter query: "); } String line = queryString != null ? queryString : in.readLine(); if (line == null || line.length() == -1) { break; } line = line.trim(); if (line.length() == 0) { break; } //Query query = parser.parse(line); Query query = builder.createPhraseQuery(field, line); System.out.println("Searching for: " + query.toString(field)); if (repeat > 0) { // repeat & time as benchmark Date start = new Date(); for (int i = 0; i < repeat; i++) { searcher.search(query, 100); } Date end = new Date(); System.out.println("Time: " + (end.getTime() - start.getTime()) + "ms"); } doPagingSearch(in, searcher, query, hitsPerPage, raw, queries == null && queryString == null); if (queryString != null) { break; } } reader.close(); }
From source file:com.stratio.cassandra.lucene.search.condition.MatchCondition.java
License:Apache License
/** {@inheritDoc} */ @Override// www. j av a 2s .c o m public Query query(Schema schema) { SingleColumnMapper<?> columnMapper = getMapper(schema, field); Class<?> clazz = columnMapper.baseClass(); Query query; if (clazz == String.class) { String value = (String) columnMapper.base(field, this.value); Analyzer analyzer = schema.getAnalyzer(); QueryBuilder queryBuilder = new QueryBuilder(analyzer); query = queryBuilder.createPhraseQuery(field, value, 0); if (query == null) query = new BooleanQuery(); } else if (clazz == Integer.class) { Integer value = (Integer) columnMapper.base(field, this.value); query = NumericRangeQuery.newIntRange(field, value, value, true, true); } else if (clazz == Long.class) { Long value = (Long) columnMapper.base(field, this.value); query = NumericRangeQuery.newLongRange(field, value, value, true, true); } else if (clazz == Float.class) { Float value = (Float) columnMapper.base(field, this.value); query = NumericRangeQuery.newFloatRange(field, value, value, true, true); } else if (clazz == Double.class) { Double value = (Double) columnMapper.base(field, this.value); query = NumericRangeQuery.newDoubleRange(field, value, value, true, true); } else { String message = String.format("Match queries are not supported by %s mapper", clazz.getSimpleName()); throw new UnsupportedOperationException(message); } query.setBoost(boost); return query; }
From source file:com.stratio.cassandra.lucene.search.condition.PhraseCondition.java
License:Apache License
/** {@inheritDoc} */ @Override/* w w w.j a v a 2s. c o m*/ public Query query(Schema schema) { SingleColumnMapper<?> columnMapper = getMapper(schema, field); Class<?> clazz = columnMapper.baseClass(); if (clazz == String.class) { Analyzer analyzer = schema.getAnalyzer(); QueryBuilder queryBuilder = new QueryBuilder(analyzer); Query query = queryBuilder.createPhraseQuery(field, value, slop); if (query == null) query = new BooleanQuery(); query.setBoost(boost); return query; } else { String message = String.format("Unsupported query %s for mapper %s", this, columnMapper); throw new UnsupportedOperationException(message); } }
From source file:nl.knaw.huygens.timbuctoo.lucene.demoTwo.SearchFiles.java
License:Apache License
/** Simple command-line based search demo. */ public static void main(String[] args) throws Exception { Date start = new Date(); String usage = "Usage:\tjava org.apache.lucene.demo.SearchFiles [-index dir] [-field f] [-repeat n] [-queries file] [-query string] [-raw] [-paging hitsPerPage]\n\nSee http://lucene.apache.org/core/4_1_0/demo/ for details."; if (args.length > 0 && ("-h".equals(args[0]) || "-help".equals(args[0]))) { System.out.println(usage); System.exit(0);/* w w w. j ava 2s.c o m*/ } String index = "index"; String field = "contents"; String queries = null; int repeat = 0; boolean raw = false; String queryString = null; int hitsPerPage = 10; for (int i = 0; i < args.length; i++) { if ("-index".equals(args[i])) { index = args[i + 1]; i++; } else if ("-field".equals(args[i])) { field = args[i + 1]; i++; } else if ("-queries".equals(args[i])) { queries = args[i + 1]; i++; } else if ("-query".equals(args[i])) { queryString = args[i + 1]; i++; } else if ("-repeat".equals(args[i])) { repeat = Integer.parseInt(args[i + 1]); i++; } else if ("-raw".equals(args[i])) { raw = true; } else if ("-paging".equals(args[i])) { hitsPerPage = Integer.parseInt(args[i + 1]); if (hitsPerPage <= 0) { System.err.println("There must be at least 1 hit per page."); System.exit(1); } i++; } } field = "author"; queryString = "bront"; IndexReader reader = DirectoryReader.open(FSDirectory.open(Paths.get(index))); IndexSearcher searcher = new IndexSearcher(reader); Analyzer analyzer = new MySearchAnalyzer(); BufferedReader in = null; if (queries != null) { in = Files.newBufferedReader(Paths.get(queries), StandardCharsets.UTF_8); } else { in = new BufferedReader(new InputStreamReader(System.in, StandardCharsets.UTF_8)); } QueryBuilder builder = new QueryBuilder(analyzer); while (true) { if (queries == null && queryString == null) { // prompt the user System.out.println("Enter query: "); } String line = queryString != null ? queryString : in.readLine(); if (line == null || line.length() == -1) { break; } line = line.trim(); if (line.length() == 0) { break; } Query query = builder.createPhraseQuery(field, line); System.out.println("field: " + field); System.out.println("query: " + line); System.out.println("Searching for: " + query.toString(field)); if (repeat > 0) { // repeat & time as benchmark start = new Date(); for (int i = 0; i < repeat; i++) { searcher.search(query, 100); } Date end = new Date(); System.out.println("Time: " + (end.getTime() - start.getTime()) + "ms"); } doPagingSearch(in, searcher, query, hitsPerPage, raw, queries == null && queryString == null); if (queryString != null) { break; } } reader.close(); Date end = new Date(); System.out.println("Time: " + (end.getTime() - start.getTime()) + "ms"); }
From source file:org.alfresco.solr.AlfrescoFieldType.java
License:Open Source License
static Query parseFieldQuery(QParser parser, Analyzer analyzer, String field, String queryText) { // note, this method always worked this way (but nothing calls it?) because it has no idea of quotes... return new QueryBuilder(analyzer).createPhraseQuery(field, queryText); }
From source file:org.apache.cxf.jaxrs.ext.search.lucene.LuceneQueryVisitor.java
License:Apache License
public LuceneQueryVisitor(Map<String, String> fieldsMap, String contentsFieldName, Analyzer analyzer) { super(fieldsMap); this.contentsFieldName = contentsFieldName; if (analyzer != null) { queryBuilder = new QueryBuilder(analyzer); }/* w ww . ja v a 2s.c o m*/ }
From source file:org.hibernate.search.backend.lucene.types.dsl.impl.StringIndexSchemaFieldContext.java
License:LGPL
@Override protected void contribute(IndexSchemaFieldDefinitionHelper<String> helper, LuceneIndexSchemaNodeCollector collector, LuceneIndexSchemaObjectNode parentNode) { // TODO For now, we allow the sortable - analyzed combination, it will be disallowed later // if ( Sortable.YES.equals( getSortable() ) && getAnalyzer() != null ) { // throw log.cannotUseAnalyzerOnSortableField( getRelativeFieldName() ); // }//from w w w . java 2 s. c o m // TODO GSM: the idea would be to create only one global QueryBuilder object per analyzer/normalizer Analyzer analyzerOrNormalizer = analyzer != null ? analyzer : normalizer; QueryBuilder queryBuilder = analyzerOrNormalizer != null ? new QueryBuilder(analyzerOrNormalizer) : null; StringFieldConverter converter = new StringFieldConverter(helper.createUserIndexFieldConverter(), analyzerOrNormalizer); LuceneIndexSchemaFieldNode<String> schemaNode = new LuceneIndexSchemaFieldNode<>(parentNode, getRelativeFieldName(), converter, new StringFieldCodec(sortable, getFieldType(getStore(), analyzer != null), analyzerOrNormalizer), new StringFieldPredicateBuilderFactory(converter, analyzer != null, queryBuilder), StringFieldSortContributor.INSTANCE); helper.initialize(new LuceneIndexFieldAccessor<>(schemaNode)); collector.collectFieldNode(schemaNode.getAbsoluteFieldPath(), schemaNode); if (analyzerOrNormalizer != null) { collector.collectAnalyzer(schemaNode.getAbsoluteFieldPath(), analyzerOrNormalizer); } }
From source file:suonos.lucene.Statement.java
License:Apache License
public QueryBuilder queryBuilder() { return new QueryBuilder(luceneIndex.getAnalyser()); }
From source file:webreduce.indexing.luceneSearcher.java
public List<Dataset> search() throws IOException { List<Dataset> resultList; resultList = new ArrayList<>(); BooleanQuery.Builder finalQueryBuilder = new BooleanQuery.Builder(); BooleanQuery.Builder entityQueryBuilder = new BooleanQuery.Builder(); BooleanQuery.Builder attributeQueryBuilder = new BooleanQuery.Builder(); //gives me queries QueryParser qpa = new QueryParser(ATTRIBUTES_FIELD, new CustomAnalyzer()); QueryParser qpe = new QueryParser(ENTITIES_FIELD, new CustomAnalyzer()); //QueryWrapperFilter queryFilter = new QueryWrapperFilter(query); //CachingWrapperFilter cachingFilter = new CachingWrapperFilter(queryFilter); //CachingWrapperQuery typeFilterR = new CachingWrapperFilter(new TermsFilter(new Term(TABLE_TYPE_FIELD, "RELATION"))); IndexReader reader = DirectoryReader.open(FSDirectory.open(Paths.get(indexDir))); IndexSearcher searcher = new IndexSearcher(reader); QueryBuilder queryBuilder = new QueryBuilder(new CustomAnalyzer()); System.out.println("Attributes: \n" + Arrays.deepToString(attributes)); System.out.println("Entities: \n" + Arrays.deepToString(entities)); //add attributes one by one for (String a : attributes) { Query qa;/* w w w . j ava 2 s. c o m*/ try { qa = qpa.parse("\"" + a + "\""); attributeQueryBuilder.add(qa, BooleanClause.Occur.SHOULD); } catch (ParseException ex) { } } //end of for loop //remove null HashSet<String> entitySet; entitySet = new HashSet<>(Arrays.asList(entities)); entitySet.remove(null); entities = entitySet.toArray(new String[entitySet.size()]); System.out.println("Entities after null removal \n" + Arrays.deepToString(entities)); Multiset<Integer> docNoCount; docNoCount = HashMultiset.create(); //Take only top 50 entities; String[] entities50 = new String[50]; System.arraycopy(entities, 0, entities50, 0, 50); System.out.println(Arrays.deepToString(entities50)); for (String e : entities50) { System.out.println(e); if (e == null) { continue; } Query qe; try { qe = qpe.parse(QueryParserBase.escape(e)); //Query qeph = qpe.parse("\"" + QueryParserBase.escape(e) + "\""); finalQueryBuilder.add(qe, BooleanClause.Occur.MUST); //add entities boolean query finalQueryBuilder.add(attributeQueryBuilder.build(), BooleanClause.Occur.MUST); //add attributes query TopDocs td = searcher.search(finalQueryBuilder.build(), numberOfResults * 10); for (ScoreDoc sd : td.scoreDocs) { int docNo = sd.doc; docNoCount.add(docNo); } } catch (ParseException ex) { } System.out.println("Top Doc id: \n" + Multisets.copyHighestCountFirst(docNoCount).entrySet().iterator().next().getElement()); } //Sort the returned docs by their frequency and store it in docNoSorted ImmutableMultiset<Integer> docNoSorted = Multisets.copyHighestCountFirst(docNoCount); //Get the entry set of the frequency ordered document set ImmutableSet<Multiset.Entry<Integer>> entrySet = Multisets.copyHighestCountFirst(docNoCount).entrySet(); //Get the iterator for the sorted entry set UnmodifiableIterator<Multiset.Entry<Integer>> iterator = entrySet.iterator(); int bestDocId = iterator.next().getElement(); System.out.println("first count" + iterator.next()); // Set<Integer> elementSet = docNoSorted.elementSet(); Integer next = elementSet.iterator().next(); System.out.println("Most frequent document id: " + next); int resultSetSize; resultSetSize = docNoSorted.elementSet().size(); System.out.println("Entry Set Size: " + resultSetSize + " Cardinality: " + docNoSorted.size()); Set<Integer> elementSet1 = Multisets.copyHighestCountFirst(docNoSorted).elementSet(); List<Integer> t = new ArrayList<Integer>(elementSet1); List<Integer> subList = t.subList(0, numberOfResults); //ArrayList subArrayList = new ArrayList(subList); Iterator<Integer> subListIterator = subList.iterator(); //we have all the web table doc IDs //We snould take while (subListIterator.hasNext()) { int docID = subListIterator.next(); Document doc; doc = searcher.doc(docID); String jsonString = doc.get("full_result"); Dataset er = Dataset.fromJson(jsonString); resultList.add(er); } return resultList; }