Example usage for org.apache.lucene.search Query equals

List of usage examples for org.apache.lucene.search Query equals

Introduction

In this page you can find the example usage for org.apache.lucene.search Query equals.

Prototype

@Override
public abstract boolean equals(Object obj);

Source Link

Document

Override and implement query instance equivalence properly in a subclass.

Usage

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
}