List of usage examples for org.apache.lucene.search Query equals
@Override public abstract boolean equals(Object obj);
From source file:com.liferay.portal.search.lucene.LuceneHelperImpl.java
License:Open Source License
private void _includeIfUnique(BooleanQuery booleanQuery, Query query, BooleanClause.Occur occur, boolean like) { if (query instanceof TermQuery) { Set<Term> terms = new HashSet<Term>(); query.extractTerms(terms);/*from w ww .j a va 2s . com*/ for (Term term : terms) { String termValue = term.text(); if (like) { term = term.createTerm(StringPool.STAR.concat(termValue).concat(StringPool.STAR)); query = new WildcardQuery(term); } else { query = new TermQuery(term); } boolean included = false; for (BooleanClause booleanClause : booleanQuery.getClauses()) { if (query.equals(booleanClause.getQuery())) { included = true; } } if (!included) { booleanQuery.add(query, occur); } } } else if (query instanceof BooleanQuery) { BooleanQuery curBooleanQuery = (BooleanQuery) query; for (BooleanClause booleanClause : curBooleanQuery.getClauses()) { _includeIfUnique(booleanQuery, booleanClause.getQuery(), booleanClause.getOccur(), like); } } else { boolean included = false; for (BooleanClause booleanClause : booleanQuery.getClauses()) { if (query.equals(booleanClause.getQuery())) { included = true; } } if (!included) { booleanQuery.add(query, occur); } } }
From source file:com.sindicetech.siren.search.node.TestNodeNumericRangeQuery32.java
License:Open Source License
@Test public void testEqualsAndHash() throws Exception { QueryUtils.checkHashEquals(NodeNumericRangeQuery.newIntRange("test1", 4, 10, 20, true, true)); QueryUtils.checkHashEquals(NodeNumericRangeQuery.newIntRange("test2", 4, 10, 20, false, true)); QueryUtils.checkHashEquals(NodeNumericRangeQuery.newIntRange("test3", 4, 10, 20, true, false)); QueryUtils.checkHashEquals(NodeNumericRangeQuery.newIntRange("test4", 4, 10, 20, false, false)); QueryUtils.checkHashEquals(NodeNumericRangeQuery.newIntRange("test5", 4, 10, null, true, true)); QueryUtils.checkHashEquals(NodeNumericRangeQuery.newIntRange("test6", 4, null, 20, true, true)); QueryUtils.checkHashEquals(NodeNumericRangeQuery.newIntRange("test7", 4, null, null, true, true)); QueryUtils.checkEqual(NodeNumericRangeQuery.newIntRange("test8", 4, 10, 20, true, true), NodeNumericRangeQuery.newIntRange("test8", 4, 10, 20, true, true)); QueryUtils.checkUnequal(NodeNumericRangeQuery.newIntRange("test9", 4, 10, 20, true, true), NodeNumericRangeQuery.newIntRange("test9", 8, 10, 20, true, true)); QueryUtils.checkUnequal(NodeNumericRangeQuery.newIntRange("test10a", 4, 10, 20, true, true), NodeNumericRangeQuery.newIntRange("test10b", 4, 10, 20, true, true)); QueryUtils.checkUnequal(NodeNumericRangeQuery.newIntRange("test11", 4, 10, 20, true, true), NodeNumericRangeQuery.newIntRange("test11", 4, 20, 10, true, true)); QueryUtils.checkUnequal(NodeNumericRangeQuery.newIntRange("test12", 4, 10, 20, true, true), NodeNumericRangeQuery.newIntRange("test12", 4, 10, 20, false, true)); QueryUtils.checkUnequal(NodeNumericRangeQuery.newIntRange("test13", 4, 10, 20, true, true), NodeNumericRangeQuery.newFloatRange("test13", 4, 10f, 20f, true, true)); // the following produces a hash collision, because Long and Integer have the same hashcode, so only test equality: final Query q1 = NodeNumericRangeQuery.newIntRange("test14", 4, 10, 20, true, true); final Query q2 = NodeNumericRangeQuery.newLongRange("test14", 4, 10L, 20L, true, true); assertFalse(q1.equals(q2)); assertFalse(q2.equals(q1));//w w w . j a va2 s. c om }
From source file:com.sindicetech.siren.search.node.TestNodeTermRangeQuery.java
License:Open Source License
public void testEqualsHashcode() { Query query = NodeTermRangeQuery.newStringRange(DEFAULT_TEST_FIELD, "/computera", "/computerc", true, true); query.setBoost(1.0f);/* w w w . j a v a 2 s . c o m*/ Query other = NodeTermRangeQuery.newStringRange(DEFAULT_TEST_FIELD, "/computera", "/computerc", true, true); other.setBoost(1.0f); assertEquals("query equals itself is true", query, query); assertEquals("equivalent queries are equal", query, other); assertEquals("hashcode must return same value when equals is true", query.hashCode(), other.hashCode()); other.setBoost(2.0f); assertFalse("Different boost queries are not equal", query.equals(other)); other = NodeTermRangeQuery.newStringRange("notcontent", "/computera", "/computerc", true, true); assertFalse("Different fields are not equal", query.equals(other)); other = NodeTermRangeQuery.newStringRange(DEFAULT_TEST_FIELD, "/computerx", "/computerc", true, true); assertFalse("Different lower terms are not equal", query.equals(other)); other = NodeTermRangeQuery.newStringRange(DEFAULT_TEST_FIELD, "/computera", "/computerz", true, true); assertFalse("Different upper terms are not equal", query.equals(other)); query = NodeTermRangeQuery.newStringRange(DEFAULT_TEST_FIELD, null, "/computerc", true, true); other = NodeTermRangeQuery.newStringRange(DEFAULT_TEST_FIELD, null, "/computerc", true, true); assertEquals("equivalent queries with null lowerterms are equal()", query, other); assertEquals("hashcode must return same value when equals is true", query.hashCode(), other.hashCode()); query = NodeTermRangeQuery.newStringRange(DEFAULT_TEST_FIELD, "/computerc", null, true, true); other = NodeTermRangeQuery.newStringRange(DEFAULT_TEST_FIELD, "/computerc", null, true, true); assertEquals("equivalent queries with null upperterms are equal()", query, other); assertEquals("hashcode returns same value", query.hashCode(), other.hashCode()); query = NodeTermRangeQuery.newStringRange(DEFAULT_TEST_FIELD, null, "/computerc", true, true); other = NodeTermRangeQuery.newStringRange(DEFAULT_TEST_FIELD, "/computerc", null, true, true); assertFalse("queries with different upper and lower terms are not equal", query.equals(other)); query = NodeTermRangeQuery.newStringRange(DEFAULT_TEST_FIELD, "/computera", "/computerc", false, false); other = NodeTermRangeQuery.newStringRange(DEFAULT_TEST_FIELD, "/computera", "/computerc", true, true); assertFalse("queries with different inclusive are not equal", query.equals(other)); }
From source file:de.ingrid.search.utils.facet.DummyQueryParsers.java
License:EUPL
public Query parse(IngridQuery ingridQuery) { BooleanQuery booleanQuery = new BooleanQuery(); ClauseQuery[] clauses = ingridQuery.getClauses(); for (ClauseQuery clauseQuery : clauses) { final Query sc = parse(clauseQuery); if (!sc.equals(new BooleanQuery())) { Occur occur = transform(clauseQuery.isRequred(), clauseQuery.isProhibited()); booleanQuery.add(sc, occur); }//from w w w . ja v a 2 s .co m } parse(ingridQuery, booleanQuery); return booleanQuery; }
From source file:net.sourceforge.docfetcher.view.PreviewPanel.java
License:Open Source License
/** * Sets the file to be displayed, using <tt>parser</tt> to extract the * text from the file on the disk. This method does nothing if the given * file is null. The <tt>force</tt> parameter specifies whether the * preview should be updated even if neither the file nor the search terms * have changed in the meantime.//w w w. j a v a2 s . c o m */ private void setFile(final File file, final Parser parser, final Query query, boolean force) { File lastFile = this.file; Query lastQuery = this.query; this.file = file; this.parser = parser; this.query = query; // Check input if (file == null) return; if (parser == null) // Allowed to be null if file is null, too throw new IllegalArgumentException(); if (!isActive) return; if (file.equals(lastFile) && !force) if (query != null && query.equals(lastQuery)) return; if (file.isDirectory()) throw new IllegalStateException("File expected for preview, got directory instead."); //$NON-NLS-1$ if (!file.exists()) { textViewer.setText(Msg.file_not_found.value()); showViewer(textViewerContainer); return; } // Use the HTML browser if (file.getAbsolutePath().equals(Const.HELP_FILE) || Pref.Bool.PreviewHTML.getValue()) { final BrowserPanel browser = browserProvider.getBrowser(previewPanel, browserToolBar, parser); if (browser != null) { browser.addProgressListener(new ProgressAdapter() { public void completed(ProgressEvent event) { showViewer(browser); upBt.setEnabled(false); downBt.setEnabled(false); occurrenceCounter.setText("0"); //$NON-NLS-1$ } }); browser.setFile(file); return; } // Browser creation failed, go on to next code block } // Use text renderers showViewer(textViewerContainer); // Use monospace font for text files if (parser instanceof TextParser) { org.eclipse.swt.graphics.Font monoFont = Font.PREVIEW_MONO.getFont(); if (!textViewer.getFont().equals(monoFont)) textViewer.setFont(monoFont); } else { org.eclipse.swt.graphics.Font previewFont = Font.PREVIEW.getFont(); if (!textViewer.getFont().equals(previewFont)) textViewer.setFont(previewFont); } textViewer.setText(Msg.loading.value()); // display loading message new Thread() { // run in a thread because parsing the file takes some time public void run() { // Extract the raw text from the file String text; boolean fileParsed = true; try { text = parser.renderText(file); } catch (ParseException e) { text = Msg.cant_read_file.format(e.getMessage()); fileParsed = false; } catch (OutOfMemoryError e) { /* * We can get here if the user sets a high java heap space * value during indexing and then sets a lower value for * search only usage. */ text = Msg.out_of_jvm_memory.value(); fileParsed = false; } if (PreviewPanel.this.file != file) return; // Another preview request had been started while we were parsing /* * Create the message that will be displayed if the character limit * is reached. It is appended to the file contents later; if it * was appended here, some words in it might get highlighted. */ int maxLength = Pref.Int.PreviewLimit.getValue(); final String msg = "...\n\n\n[" //$NON-NLS-1$ + Msg.preview_limit_hint.format(new Object[] { maxLength, Pref.Int.PreviewLimit.name(), Const.USER_PROPERTIES_FILENAME }) + "]"; //$NON-NLS-1$ final boolean exceeded = text.length() > maxLength; if (text.length() > maxLength) text = text.substring(0, maxLength - msg.length()); final String fText = text; /* * Create StyleRange ranges (i.e. start-end integer pairs) for * search term highlighting. Only tokenize preview text if we're * not displaying any info messages and if there are tokens to * highlight. */ ranges = new int[0]; if (fileParsed && query != null) { final List<Integer> rangesList = new ArrayList<Integer>(); Analyzer analyzer = RootScope.analyzer; /* * A formatter is supposed to return formatted text, but * since we're only interested in the start and end offsets * of the search terms, we return null and store the offsets * in a list. */ Formatter nullFormatter = new Formatter() { public String highlightTerm(String originalText, TokenGroup tokenGroup) { for (int i = 0; i < tokenGroup.getNumTokens(); i++) { Token token = tokenGroup.getToken(i); if (tokenGroup.getScore(i) == 0) continue; int start = token.startOffset(); int end = token.endOffset(); rangesList.add(start); rangesList.add(end - start); } return null; } }; Highlighter highlighter = new Highlighter(nullFormatter, new QueryScorer(query, Document.contents)); highlighter.setMaxDocCharsToAnalyze(Integer.MAX_VALUE); highlighter.setTextFragmenter(new NullFragmenter()); try { /* * This has a return value, but we ignore it since we * only want the offsets. */ highlighter.getBestFragment(analyzer, Document.contents, fText); } catch (Exception e) { // We can do without the search term highlighting } // List to array (will be used by the method 'setHighlighting(..)') ranges = new int[rangesList.size()]; for (int i = 0; i < ranges.length; i++) ranges[i] = rangesList.get(i); } // Parsing and tokenizing done; display the results final boolean fFileParsed = fileParsed; Display.getDefault().syncExec(new Runnable() { public void run() { // Enable or disable up and down buttons upBt.setEnabled(ranges.length != 0); downBt.setEnabled(ranges.length != 0); textViewer.setText(fText); setHighlighting(fFileParsed && Pref.Bool.HighlightSearchTerms.getValue()); occurrenceCounter.setText(Integer.toString(ranges.length / 2)); if (exceeded) textViewer.append(msg); // character limit exceeded, append hint } }); } }.start(); }
From source file:newseman.TestSemanticTaggerIndexing.java
License:Apache License
public void testSemanticTokenFilter() throws IOException, ParseException { String text = "velk svtov revoluce byla velk jnov revoluce " + "s velkou extra jnovou revoluc"; Directory ramdir = new RAMDirectory(); Analyzer analyzer = new TestSemanticAnalyzer(); IndexWriter writer = new IndexWriter(ramdir, new IndexWriterConfig(TEST_VERSION_CURRENT, analyzer)); Document doc = new Document(); Field field1 = newField("foo", text, TextField.TYPE_STORED); Field field2 = newField("foox", text, TextField.TYPE_STORED); doc.add(field1);//from ww w.j a v a 2 s .c o m doc.add(field2); writer.addDocument(doc); writer.close(); IndexSearcher ram = new IndexSearcher(DirectoryReader.open(ramdir)); QueryParser qp1 = new QueryParser(TEST_VERSION_CURRENT, "foo", analyzer); QueryParser qp2 = new QueryParser(TEST_VERSION_CURRENT, "foox", analyzer); TopDocs hits; hits = ram.search(qp1.parse("foo:XXX"), 10); assertTrue(hits.totalHits == 1); hits = ram.search(qp1.parse("foox:XXX"), 10); assertTrue(hits.totalHits == 0); // currently, each token is tokenized by the qparser // so we don't see them together Query q1 = qp1.parse("\"velk jnov revoluce\""); Query q2 = qp2.parse("\"velk jnov revoluce\""); assertTrue(!q1.equals(q2)); assertTrue(q1 instanceof MultiPhraseQuery); assertTrue(q2 instanceof PhraseQuery); MultiPhraseQuery mq = (MultiPhraseQuery) q1; List<Term[]> ta = mq.getTermArrays(); StringBuffer o = new StringBuffer(); for (int i = 0; i < ta.size(); i++) { for (Term t : ta.get(i)) { o.append(t.toString()); o.append(" "); } o.append("|"); } assertTrue(o.toString() .equals("foo:velk foo:velk jnov revoluce foo:XXX |foo:jnov |foo:revoluce |")); assertTrue(q1.toString().equals("foo:\"(velk velk jnov revoluce XXX) jnov revoluce\"")); assertTrue(q2.toString().equals("foox:\"velk jnov revoluce\"")); Set<Term> terms = new HashSet<Term>(); q1.extractTerms(terms); // extract only the 2nd (semantic) element q1 = qp1.parse("revoluce"); terms = new HashSet<Term>(); q1.extractTerms(terms); Term semQ = (Term) terms.toArray()[1]; String sem = semQ.text(); hits = ram.search(qp1.parse(sem), 10); assertTrue(hits.totalHits == 1); hits = ram.search(qp1.parse(semQ.toString()), 10); assertTrue(hits.totalHits == 1); hits = ram.search(qp2.parse(sem), 10); assertTrue(hits.totalHits == 0); ramdir.close(); }
From source file:org.apache.blur.lucene.search.SuperParserTest.java
License:Apache License
@Test public void test28() throws ParseException { SpatialContext ctx = SpatialContext.GEO; ShapeReadWriter<SpatialContext> shapeReadWriter = new ShapeReadWriter<SpatialContext>(ctx); int maxLevels = 11; SpatialPrefixTree grid = new GeohashPrefixTree(ctx, maxLevels); RecursivePrefixTreeStrategy strategy = new RecursivePrefixTreeStrategy(grid, "a.id_gis", false); Circle circle = ctx.makeCircle(-80.0, 33.0, DistanceUtils.dist2Degrees(10, DistanceUtils.EARTH_MEAN_RADIUS_KM)); SpatialArgs args = new SpatialArgs(SpatialOperation.Intersects, circle); String writeSpatialArgs = SpatialArgsParser.writeSpatialArgs(args, shapeReadWriter); // This has to be done because of rounding. SpatialArgs spatialArgs = SpatialArgsParser.parse(writeSpatialArgs, shapeReadWriter); Query q1 = sq(strategy.makeQuery(spatialArgs)); Query q = parseSq("a.id_gis:\"" + writeSpatialArgs + "\""); boolean equals = q1.equals(q); assertTrue(equals);/*from w w w . j a v a 2 s .co m*/ }
From source file:org.apache.blur.lucene.search.SuperParserTest.java
License:Apache License
@Test public void test29() throws ParseException { SpatialContext ctx = SpatialContext.GEO; int maxLevels = 11; SpatialPrefixTree grid = new GeohashPrefixTree(ctx, maxLevels); RecursivePrefixTreeStrategy strategy = new RecursivePrefixTreeStrategy(grid, "a.id_gis", false); Circle circle = ctx.makeCircle(-80.0, 33.0, DistanceUtils.dist2Degrees(10, DistanceUtils.EARTH_MEAN_RADIUS_KM)); SpatialArgs args = new SpatialArgs(SpatialOperation.Intersects, circle); Query q1 = sq(strategy.makeQuery(args)); Query q = parseSq("a.id_gis:\"Intersects(Circle(33.000000,-80.000000 d=10.0km))\""); boolean equals = q1.equals(q); assertTrue(equals);//from ww w .j av a 2s . co m }
From source file:org.apache.blur.lucene.search.SuperParserTest.java
License:Apache License
@Test public void test30() throws ParseException { SpatialContext ctx = SpatialContext.GEO; int maxLevels = 11; SpatialPrefixTree grid = new GeohashPrefixTree(ctx, maxLevels); RecursivePrefixTreeStrategy strategy = new RecursivePrefixTreeStrategy(grid, "a.id_gis", false); Circle circle = ctx.makeCircle(-80.0, 33.0, DistanceUtils.dist2Degrees(10, DistanceUtils.EARTH_MEAN_RADIUS_MI)); SpatialArgs args = new SpatialArgs(SpatialOperation.Intersects, circle); Query q1 = sq(strategy.makeQuery(args)); Query q = parseSq("a.id_gis:\"Intersects(Circle(33.000000,-80.000000 d=10.0m))\""); boolean equals = q1.equals(q); assertTrue(equals);//from ww w.j a va2 s .c om }
From source file:org.apache.solr.legacy.TestNumericRangeQuery32.java
License:Apache License
@Test public void testEqualsAndHash() throws Exception { QueryUtils.checkHashEquals(LegacyNumericRangeQuery.newIntRange("test1", 4, 10, 20, true, true)); QueryUtils.checkHashEquals(LegacyNumericRangeQuery.newIntRange("test2", 4, 10, 20, false, true)); QueryUtils.checkHashEquals(LegacyNumericRangeQuery.newIntRange("test3", 4, 10, 20, true, false)); QueryUtils.checkHashEquals(LegacyNumericRangeQuery.newIntRange("test4", 4, 10, 20, false, false)); QueryUtils.checkHashEquals(LegacyNumericRangeQuery.newIntRange("test5", 4, 10, null, true, true)); QueryUtils.checkHashEquals(LegacyNumericRangeQuery.newIntRange("test6", 4, null, 20, true, true)); QueryUtils.checkHashEquals(LegacyNumericRangeQuery.newIntRange("test7", 4, null, null, true, true)); QueryUtils.checkEqual(LegacyNumericRangeQuery.newIntRange("test8", 4, 10, 20, true, true), LegacyNumericRangeQuery.newIntRange("test8", 4, 10, 20, true, true)); QueryUtils.checkUnequal(LegacyNumericRangeQuery.newIntRange("test9", 4, 10, 20, true, true), LegacyNumericRangeQuery.newIntRange("test9", 8, 10, 20, true, true)); QueryUtils.checkUnequal(LegacyNumericRangeQuery.newIntRange("test10a", 4, 10, 20, true, true), LegacyNumericRangeQuery.newIntRange("test10b", 4, 10, 20, true, true)); QueryUtils.checkUnequal(LegacyNumericRangeQuery.newIntRange("test11", 4, 10, 20, true, true), LegacyNumericRangeQuery.newIntRange("test11", 4, 20, 10, true, true)); QueryUtils.checkUnequal(LegacyNumericRangeQuery.newIntRange("test12", 4, 10, 20, true, true), LegacyNumericRangeQuery.newIntRange("test12", 4, 10, 20, false, true)); QueryUtils.checkUnequal(LegacyNumericRangeQuery.newIntRange("test13", 4, 10, 20, true, true), LegacyNumericRangeQuery.newFloatRange("test13", 4, 10f, 20f, true, true)); // the following produces a hash collision, because Long and Integer have the same hashcode, so only test equality: Query q1 = LegacyNumericRangeQuery.newIntRange("test14", 4, 10, 20, true, true); Query q2 = LegacyNumericRangeQuery.newLongRange("test14", 4, 10L, 20L, true, true); assertFalse(q1.equals(q2)); assertFalse(q2.equals(q1));//w w w . ja v a 2 s . c o m }