Search in sources :

Example 1 with MatchQueryBuilder

use of org.elasticsearch.index.query.MatchQueryBuilder in project elasticsearch by elastic.

the class DeleteByQueryConcurrentTests method testConcurrentDeleteByQueriesOnSameDocs.

public void testConcurrentDeleteByQueriesOnSameDocs() throws Throwable {
    final long docs = randomIntBetween(50, 100);
    List<IndexRequestBuilder> builders = new ArrayList<>();
    for (int i = 0; i < docs; i++) {
        builders.add(client().prepareIndex("test", "doc", String.valueOf(i)).setSource("foo", "bar"));
    }
    indexRandom(true, true, true, builders);
    final Thread[] threads = new Thread[scaledRandomIntBetween(2, 9)];
    final CountDownLatch start = new CountDownLatch(1);
    final MatchQueryBuilder query = matchQuery("foo", "bar");
    final AtomicLong deleted = new AtomicLong(0);
    for (int t = 0; t < threads.length; t++) {
        Runnable r = () -> {
            try {
                start.await();
                BulkByScrollResponse response = deleteByQuery().source("test").filter(query).refresh(true).get();
                // Some deletions might fail due to version conflict, but
                // what matters here is the total of successful deletions
                deleted.addAndGet(response.getDeleted());
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
            }
        };
        threads[t] = new Thread(r);
        threads[t].start();
    }
    start.countDown();
    for (Thread thread : threads) {
        thread.join();
    }
    assertHitCount(client().prepareSearch("test").setSize(0).get(), 0L);
    assertThat(deleted.get(), equalTo(docs));
}
Also used : ArrayList(java.util.ArrayList) CountDownLatch(java.util.concurrent.CountDownLatch) BulkByScrollResponse(org.elasticsearch.action.bulk.byscroll.BulkByScrollResponse) IndexRequestBuilder(org.elasticsearch.action.index.IndexRequestBuilder) AtomicLong(java.util.concurrent.atomic.AtomicLong) MatchQueryBuilder(org.elasticsearch.index.query.MatchQueryBuilder)

Example 2 with MatchQueryBuilder

use of org.elasticsearch.index.query.MatchQueryBuilder in project elasticsearch by elastic.

the class HighlighterSearchIT method testHighlightNoMatchSizeNumberOfFragments.

public void testHighlightNoMatchSizeNumberOfFragments() throws IOException {
    assertAcked(prepareCreate("test").addMapping("type1", "text", "type=text," + randomStoreField() + "term_vector=with_positions_offsets,index_options=offsets"));
    ensureGreen();
    String text1 = "This is the first sentence. This is the second sentence." + HighlightUtils.PARAGRAPH_SEPARATOR;
    String text2 = "This is the third sentence. This is the fourth sentence.";
    String text3 = "This is the fifth sentence";
    index("test", "type1", "1", "text", new String[] { text1, text2, text3 });
    refresh();
    // The no match fragment should come from the first value of a multi-valued field
    HighlightBuilder.Field field = new HighlightBuilder.Field("text").fragmentSize(1).numOfFragments(0).highlighterType("plain").noMatchSize(20);
    SearchResponse response = client().prepareSearch("test").highlighter(new HighlightBuilder().field(field)).get();
    assertHighlight(response, 0, "text", 0, 1, equalTo("This is the first"));
    field.highlighterType("fvh");
    response = client().prepareSearch("test").highlighter(new HighlightBuilder().field(field)).get();
    assertHighlight(response, 0, "text", 0, 1, equalTo("This is the first sentence"));
    field.highlighterType("unified");
    response = client().prepareSearch("test").highlighter(new HighlightBuilder().field(field)).get();
    assertHighlight(response, 0, "text", 0, 1, equalTo("This is the first sentence"));
    // Postings hl also works but the fragment is the whole first sentence (size ignored)
    field.highlighterType("postings");
    response = client().prepareSearch("test").highlighter(new HighlightBuilder().field(field)).get();
    assertHighlight(response, 0, "text", 0, 1, equalTo("This is the first sentence."));
    //if there's a match we only return the values with matches (whole value as number_of_fragments == 0)
    MatchQueryBuilder queryBuilder = QueryBuilders.matchQuery("text", "third fifth");
    field.highlighterType("plain");
    response = client().prepareSearch("test").setQuery(queryBuilder).highlighter(new HighlightBuilder().field(field)).get();
    assertHighlight(response, 0, "text", 0, 2, equalTo("This is the <em>third</em> sentence. This is the fourth sentence."));
    assertHighlight(response, 0, "text", 1, 2, equalTo("This is the <em>fifth</em> sentence"));
    field.highlighterType("fvh");
    response = client().prepareSearch("test").setQuery(queryBuilder).highlighter(new HighlightBuilder().field(field)).get();
    assertHighlight(response, 0, "text", 0, 2, equalTo("This is the <em>third</em> sentence. This is the fourth sentence."));
    assertHighlight(response, 0, "text", 1, 2, equalTo("This is the <em>fifth</em> sentence"));
    field.highlighterType("postings");
    response = client().prepareSearch("test").setQuery(queryBuilder).highlighter(new HighlightBuilder().field(field)).get();
    assertHighlight(response, 0, "text", 0, 2, equalTo("This is the <em>third</em> sentence. This is the fourth sentence."));
    assertHighlight(response, 0, "text", 1, 2, equalTo("This is the <em>fifth</em> sentence"));
    field.highlighterType("unified");
    response = client().prepareSearch("test").setQuery(queryBuilder).highlighter(new HighlightBuilder().field(field)).get();
    assertHighlight(response, 0, "text", 0, 2, equalTo("This is the <em>third</em> sentence. This is the fourth sentence."));
    assertHighlight(response, 0, "text", 1, 2, equalTo("This is the <em>fifth</em> sentence"));
}
Also used : Field(org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder.Field) MultiMatchQueryBuilder(org.elasticsearch.index.query.MultiMatchQueryBuilder) MatchQueryBuilder(org.elasticsearch.index.query.MatchQueryBuilder) Matchers.containsString(org.hamcrest.Matchers.containsString) Field(org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder.Field) SearchResponse(org.elasticsearch.action.search.SearchResponse) ElasticsearchAssertions.assertSearchResponse(org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertSearchResponse)

Example 3 with MatchQueryBuilder

use of org.elasticsearch.index.query.MatchQueryBuilder in project elasticsearch by elastic.

the class MultiMatchQueryIT method testSingleField.

public void testSingleField() throws NoSuchFieldException, IllegalAccessException {
    SearchResponse searchResponse = client().prepareSearch("test").setQuery(randomizeType(multiMatchQuery("15", "skill"))).get();
    assertNoFailures(searchResponse);
    assertFirstHit(searchResponse, hasId("theone"));
    searchResponse = client().prepareSearch("test").setQuery(randomizeType(multiMatchQuery("15", "skill", "int-field")).analyzer("category")).get();
    assertNoFailures(searchResponse);
    assertFirstHit(searchResponse, hasId("theone"));
    String[] fields = { "full_name", "first_name", "last_name", "last_name_phrase", "first_name_phrase", "category_phrase", "category", "missing_field", "missing_fields*" };
    String[] query = { "marvel", "hero", "captain", "america", "15", "17", "1", "5", "ultimate", "Man", "marvel", "wolferine", "ninja" };
    // check if it's equivalent to a match query.
    int numIters = scaledRandomIntBetween(10, 100);
    for (int i = 0; i < numIters; i++) {
        String field = RandomPicks.randomFrom(random(), fields);
        int numTerms = randomIntBetween(1, query.length);
        StringBuilder builder = new StringBuilder();
        for (int j = 0; j < numTerms; j++) {
            builder.append(RandomPicks.randomFrom(random(), query)).append(" ");
        }
        MultiMatchQueryBuilder multiMatchQueryBuilder = randomizeType(multiMatchQuery(builder.toString(), field));
        SearchResponse multiMatchResp = client().prepareSearch("test").addSort("_score", SortOrder.DESC).addSort("_uid", SortOrder.ASC).setQuery(multiMatchQueryBuilder).get();
        MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery(field, builder.toString());
        if (multiMatchQueryBuilder.getType() != null) {
            matchQueryBuilder.type(MatchQuery.Type.valueOf(multiMatchQueryBuilder.getType().matchQueryType().toString()));
        }
        SearchResponse matchResp = client().prepareSearch("test").addSort("_score", SortOrder.DESC).addSort("_uid", SortOrder.ASC).setQuery(matchQueryBuilder).get();
        assertThat("field: " + field + " query: " + builder.toString(), multiMatchResp.getHits().getTotalHits(), equalTo(matchResp.getHits().getTotalHits()));
        SearchHits hits = multiMatchResp.getHits();
        if (field.startsWith("missing")) {
            assertEquals(0, hits.getHits().length);
        }
        for (int j = 0; j < hits.getHits().length; j++) {
            assertThat(hits.getHits()[j].getScore(), equalTo(matchResp.getHits().getHits()[j].getScore()));
            assertThat(hits.getHits()[j].getId(), equalTo(matchResp.getHits().getHits()[j].getId()));
        }
    }
}
Also used : MatchQueryBuilder(org.elasticsearch.index.query.MatchQueryBuilder) MultiMatchQueryBuilder(org.elasticsearch.index.query.MultiMatchQueryBuilder) SearchHits(org.elasticsearch.search.SearchHits) ElasticsearchAssertions.assertSearchHits(org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertSearchHits) MultiMatchQueryBuilder(org.elasticsearch.index.query.MultiMatchQueryBuilder) SearchResponse(org.elasticsearch.action.search.SearchResponse)

Example 4 with MatchQueryBuilder

use of org.elasticsearch.index.query.MatchQueryBuilder in project elasticsearch by elastic.

the class SearchQueryIT method testConstantScoreQuery.

// see #3521
public void testConstantScoreQuery() throws Exception {
    Random random = random();
    createIndex("test");
    indexRandom(true, client().prepareIndex("test", "type1", "1").setSource("field1", "quick brown fox", "field2", "quick brown fox"), client().prepareIndex("test", "type1", "2").setSource("field1", "quick lazy huge brown fox", "field2", "quick lazy huge brown fox"));
    SearchResponse searchResponse = client().prepareSearch().setQuery(constantScoreQuery(matchQuery("field1", "quick"))).get();
    assertHitCount(searchResponse, 2L);
    for (SearchHit searchHit : searchResponse.getHits().getHits()) {
        assertSearchHit(searchHit, hasScore(1.0f));
    }
    searchResponse = client().prepareSearch("test").setQuery(boolQuery().must(matchAllQuery()).must(constantScoreQuery(matchQuery("field1", "quick")).boost(1.0f + random().nextFloat()))).get();
    assertHitCount(searchResponse, 2L);
    assertFirstHit(searchResponse, hasScore(searchResponse.getHits().getAt(1).getScore()));
    client().prepareSearch("test").setQuery(constantScoreQuery(matchQuery("field1", "quick")).boost(1.0f + random().nextFloat())).get();
    assertHitCount(searchResponse, 2L);
    assertFirstHit(searchResponse, hasScore(searchResponse.getHits().getAt(1).getScore()));
    searchResponse = client().prepareSearch("test").setQuery(constantScoreQuery(boolQuery().must(matchAllQuery()).must(constantScoreQuery(matchQuery("field1", "quick")).boost(1.0f + (random.nextBoolean() ? 0.0f : random.nextFloat()))))).get();
    assertHitCount(searchResponse, 2L);
    assertFirstHit(searchResponse, hasScore(searchResponse.getHits().getAt(1).getScore()));
    for (SearchHit searchHit : searchResponse.getHits().getHits()) {
        assertSearchHit(searchHit, hasScore(1.0f));
    }
    int num = scaledRandomIntBetween(100, 200);
    IndexRequestBuilder[] builders = new IndexRequestBuilder[num];
    for (int i = 0; i < builders.length; i++) {
        builders[i] = client().prepareIndex("test_1", "type", "" + i).setSource("f", English.intToEnglish(i));
    }
    createIndex("test_1");
    indexRandom(true, builders);
    int queryRounds = scaledRandomIntBetween(10, 20);
    for (int i = 0; i < queryRounds; i++) {
        MatchQueryBuilder matchQuery = matchQuery("f", English.intToEnglish(between(0, num)));
        searchResponse = client().prepareSearch("test_1").setQuery(constantScoreQuery(matchQuery)).setSize(num).get();
        long totalHits = searchResponse.getHits().getTotalHits();
        SearchHits hits = searchResponse.getHits();
        for (SearchHit searchHit : hits) {
            assertSearchHit(searchHit, hasScore(1.0f));
        }
        searchResponse = client().prepareSearch("test_1").setQuery(boolQuery().must(matchAllQuery()).must(constantScoreQuery(matchQuery).boost(1.0f + (random.nextBoolean() ? 0.0f : random.nextFloat())))).setSize(num).get();
        hits = searchResponse.getHits();
        assertThat(hits.getTotalHits(), equalTo(totalHits));
        if (totalHits > 1) {
            float expected = hits.getAt(0).getScore();
            for (SearchHit searchHit : hits) {
                assertSearchHit(searchHit, hasScore(expected));
            }
        }
    }
}
Also used : CreateIndexRequestBuilder(org.elasticsearch.action.admin.indices.create.CreateIndexRequestBuilder) IndexRequestBuilder(org.elasticsearch.action.index.IndexRequestBuilder) Random(java.util.Random) SearchHit(org.elasticsearch.search.SearchHit) ElasticsearchAssertions.assertSearchHit(org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertSearchHit) MultiMatchQueryBuilder(org.elasticsearch.index.query.MultiMatchQueryBuilder) MatchQueryBuilder(org.elasticsearch.index.query.MatchQueryBuilder) SearchHits(org.elasticsearch.search.SearchHits) ElasticsearchAssertions.assertSearchHits(org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertSearchHits) SearchResponse(org.elasticsearch.action.search.SearchResponse) ElasticsearchAssertions.assertSearchResponse(org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertSearchResponse)

Example 5 with MatchQueryBuilder

use of org.elasticsearch.index.query.MatchQueryBuilder in project elasticsearch by elastic.

the class TransportSearchFailuresIT method testFailedSearchWithWrongQuery.

public void testFailedSearchWithWrongQuery() throws Exception {
    logger.info("Start Testing failed search with wrong query");
    assertAcked(prepareCreate("test", 1).addMapping("type", "foo", "type=geo_point"));
    NumShards test = getNumShards("test");
    for (int i = 0; i < 100; i++) {
        index(client(), Integer.toString(i), "test", i);
    }
    RefreshResponse refreshResponse = client().admin().indices().refresh(refreshRequest("test")).actionGet();
    assertThat(refreshResponse.getTotalShards(), equalTo(test.totalNumShards));
    assertThat(refreshResponse.getSuccessfulShards(), equalTo(test.numPrimaries));
    assertThat(refreshResponse.getFailedShards(), equalTo(0));
    for (int i = 0; i < 5; i++) {
        try {
            SearchResponse searchResponse = client().search(searchRequest("test").source(new SearchSourceBuilder().query(new MatchQueryBuilder("foo", "biz")))).actionGet();
            assertThat(searchResponse.getTotalShards(), equalTo(test.numPrimaries));
            assertThat(searchResponse.getSuccessfulShards(), equalTo(0));
            assertThat(searchResponse.getFailedShards(), equalTo(test.numPrimaries));
            fail("search should fail");
        } catch (ElasticsearchException e) {
            assertThat(e.unwrapCause(), instanceOf(SearchPhaseExecutionException.class));
        // all is well
        }
    }
    allowNodes("test", 2);
    assertThat(client().admin().cluster().prepareHealth().setWaitForEvents(Priority.LANGUID).setWaitForNodes(">=2").execute().actionGet().isTimedOut(), equalTo(false));
    logger.info("Running Cluster Health");
    ClusterHealthResponse clusterHealth = client().admin().cluster().health(clusterHealthRequest("test").waitForYellowStatus().waitForNoRelocatingShards(true).waitForActiveShards(test.totalNumShards)).actionGet();
    logger.info("Done Cluster Health, status {}", clusterHealth.getStatus());
    assertThat(clusterHealth.isTimedOut(), equalTo(false));
    assertThat(clusterHealth.getStatus(), anyOf(equalTo(ClusterHealthStatus.YELLOW), equalTo(ClusterHealthStatus.GREEN)));
    assertThat(clusterHealth.getActiveShards(), equalTo(test.totalNumShards));
    refreshResponse = client().admin().indices().refresh(refreshRequest("test")).actionGet();
    assertThat(refreshResponse.getTotalShards(), equalTo(test.totalNumShards));
    assertThat(refreshResponse.getSuccessfulShards(), equalTo(test.totalNumShards));
    assertThat(refreshResponse.getFailedShards(), equalTo(0));
    for (int i = 0; i < 5; i++) {
        try {
            SearchResponse searchResponse = client().search(searchRequest("test").source(new SearchSourceBuilder().query(new MatchQueryBuilder("foo", "biz")))).actionGet();
            assertThat(searchResponse.getTotalShards(), equalTo(test.numPrimaries));
            assertThat(searchResponse.getSuccessfulShards(), equalTo(0));
            assertThat(searchResponse.getFailedShards(), equalTo(test.numPrimaries));
            fail("search should fail");
        } catch (ElasticsearchException e) {
            assertThat(e.unwrapCause(), instanceOf(SearchPhaseExecutionException.class));
        // all is well
        }
    }
    logger.info("Done Testing failed search");
}
Also used : RefreshResponse(org.elasticsearch.action.admin.indices.refresh.RefreshResponse) ClusterHealthResponse(org.elasticsearch.action.admin.cluster.health.ClusterHealthResponse) MatchQueryBuilder(org.elasticsearch.index.query.MatchQueryBuilder) ElasticsearchException(org.elasticsearch.ElasticsearchException) SearchResponse(org.elasticsearch.action.search.SearchResponse) SearchSourceBuilder(org.elasticsearch.search.builder.SearchSourceBuilder)

Aggregations

MatchQueryBuilder (org.elasticsearch.index.query.MatchQueryBuilder)10 SearchResponse (org.elasticsearch.action.search.SearchResponse)7 MultiMatchQueryBuilder (org.elasticsearch.index.query.MultiMatchQueryBuilder)4 ElasticsearchException (org.elasticsearch.ElasticsearchException)2 IndexRequestBuilder (org.elasticsearch.action.index.IndexRequestBuilder)2 MultiSearchResponse (org.elasticsearch.action.search.MultiSearchResponse)2 SearchHits (org.elasticsearch.search.SearchHits)2 SearchSourceBuilder (org.elasticsearch.search.builder.SearchSourceBuilder)2 Field (org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder.Field)2 ElasticsearchAssertions.assertSearchHits (org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertSearchHits)2 ElasticsearchAssertions.assertSearchResponse (org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertSearchResponse)2 Matchers.containsString (org.hamcrest.Matchers.containsString)2 ArrayList (java.util.ArrayList)1 Collection (java.util.Collection)1 Random (java.util.Random)1 CountDownLatch (java.util.concurrent.CountDownLatch)1 AtomicLong (java.util.concurrent.atomic.AtomicLong)1 TimeRange (org.bedework.caldav.util.TimeRange)1 CalFacadeException (org.bedework.calfacade.exc.CalFacadeException)1 SortTerm (org.bedework.calfacade.filter.SortTerm)1