Search in sources :

Example 51 with SearchHit

use of org.graylog.shaded.elasticsearch7.org.elasticsearch.search.SearchHit in project elasticsearch by elastic.

the class GeoPolygonIT method testSimpleUnclosedPolygon.

public void testSimpleUnclosedPolygon() throws Exception {
    List<GeoPoint> points = new ArrayList<>();
    points.add(new GeoPoint(40.7, -74.0));
    points.add(new GeoPoint(40.7, -74.1));
    points.add(new GeoPoint(40.8, -74.1));
    points.add(new GeoPoint(40.8, -74.0));
    SearchResponse searchResponse = // from NY
    client().prepareSearch("test").setQuery(boolQuery().must(geoPolygonQuery("location", points))).execute().actionGet();
    assertHitCount(searchResponse, 4);
    assertThat(searchResponse.getHits().getHits().length, equalTo(4));
    for (SearchHit hit : searchResponse.getHits()) {
        assertThat(hit.getId(), anyOf(equalTo("1"), equalTo("3"), equalTo("4"), equalTo("5")));
    }
}
Also used : GeoPoint(org.elasticsearch.common.geo.GeoPoint) SearchHit(org.elasticsearch.search.SearchHit) ArrayList(java.util.ArrayList) SearchResponse(org.elasticsearch.action.search.SearchResponse)

Example 52 with SearchHit

use of org.graylog.shaded.elasticsearch7.org.elasticsearch.search.SearchHit in project elasticsearch by elastic.

the class QueryProfilerIT method testProfileMatchesRegular.

/**
     * This test generates 1-10 random queries and executes a profiled and non-profiled
     * search for each query.  It then does some basic sanity checking of score and hits
     * to make sure the profiling doesn't interfere with the hits being returned
     */
public void testProfileMatchesRegular() throws Exception {
    createIndex("test");
    ensureGreen();
    int numDocs = randomIntBetween(100, 150);
    IndexRequestBuilder[] docs = new IndexRequestBuilder[numDocs];
    for (int i = 0; i < numDocs; i++) {
        docs[i] = client().prepareIndex("test", "type1", String.valueOf(i)).setSource("field1", English.intToEnglish(i), "field2", i);
    }
    List<String> stringFields = Arrays.asList("field1");
    List<String> numericFields = Arrays.asList("field2");
    indexRandom(true, docs);
    refresh();
    int iters = between(1, 10);
    for (int i = 0; i < iters; i++) {
        QueryBuilder q = randomQueryBuilder(stringFields, numericFields, numDocs, 3);
        logger.info("Query: {}", q);
        SearchRequestBuilder vanilla = client().prepareSearch("test").setQuery(q).setProfile(false).addSort("_uid", SortOrder.ASC).setPreference("_primary").setSearchType(SearchType.QUERY_THEN_FETCH);
        SearchRequestBuilder profile = client().prepareSearch("test").setQuery(q).setProfile(true).addSort("_uid", SortOrder.ASC).setPreference("_primary").setSearchType(SearchType.QUERY_THEN_FETCH);
        MultiSearchResponse.Item[] responses = client().prepareMultiSearch().add(vanilla).add(profile).execute().actionGet().getResponses();
        SearchResponse vanillaResponse = responses[0].getResponse();
        SearchResponse profileResponse = responses[1].getResponse();
        float vanillaMaxScore = vanillaResponse.getHits().getMaxScore();
        float profileMaxScore = profileResponse.getHits().getMaxScore();
        if (Float.isNaN(vanillaMaxScore)) {
            assertTrue("Vanilla maxScore is NaN but Profile is not [" + profileMaxScore + "]", Float.isNaN(profileMaxScore));
        } else {
            assertTrue("Profile maxScore of [" + profileMaxScore + "] is not close to Vanilla maxScore [" + vanillaMaxScore + "]", nearlyEqual(vanillaMaxScore, profileMaxScore, 0.001));
        }
        assertThat("Profile totalHits of [" + profileResponse.getHits().getTotalHits() + "] is not close to Vanilla totalHits [" + vanillaResponse.getHits().getTotalHits() + "]", vanillaResponse.getHits().getTotalHits(), equalTo(profileResponse.getHits().getTotalHits()));
        SearchHit[] vanillaHits = vanillaResponse.getHits().getHits();
        SearchHit[] profileHits = profileResponse.getHits().getHits();
        for (int j = 0; j < vanillaHits.length; j++) {
            assertThat("Profile hit #" + j + " has a different ID from Vanilla", vanillaHits[j].getId(), equalTo(profileHits[j].getId()));
        }
    }
}
Also used : SearchRequestBuilder(org.elasticsearch.action.search.SearchRequestBuilder) SearchHit(org.elasticsearch.search.SearchHit) Matchers.isEmptyOrNullString(org.hamcrest.Matchers.isEmptyOrNullString) RandomQueryGenerator.randomQueryBuilder(org.elasticsearch.search.profile.query.RandomQueryGenerator.randomQueryBuilder) QueryBuilder(org.elasticsearch.index.query.QueryBuilder) MultiSearchResponse(org.elasticsearch.action.search.MultiSearchResponse) SearchResponse(org.elasticsearch.action.search.SearchResponse) IndexRequestBuilder(org.elasticsearch.action.index.IndexRequestBuilder)

Example 53 with SearchHit

use of org.graylog.shaded.elasticsearch7.org.elasticsearch.search.SearchHit in project elasticsearch by elastic.

the class RandomScoreFunctionIT method testSeedReportedInExplain.

public void testSeedReportedInExplain() throws Exception {
    createIndex("test");
    ensureGreen();
    index("test", "type", "1", jsonBuilder().startObject().endObject());
    flush();
    refresh();
    int seed = 12345678;
    SearchResponse resp = client().prepareSearch("test").setQuery(functionScoreQuery(matchAllQuery(), randomFunction(seed))).setExplain(true).get();
    assertNoFailures(resp);
    assertEquals(1, resp.getHits().getTotalHits());
    SearchHit firstHit = resp.getHits().getAt(0);
    assertThat(firstHit.getExplanation().toString(), containsString("" + seed));
}
Also used : SearchHit(org.elasticsearch.search.SearchHit) SearchResponse(org.elasticsearch.action.search.SearchResponse)

Example 54 with SearchHit

use of org.graylog.shaded.elasticsearch7.org.elasticsearch.search.SearchHit in project elasticsearch by elastic.

the class RandomScoreFunctionIT method testScoreAccessWithinScript.

public void testScoreAccessWithinScript() throws Exception {
    assertAcked(prepareCreate("test").addMapping("type", "body", "type=text", "index", "type=" + randomFrom("short", "float", "long", "integer", "double")));
    int docCount = randomIntBetween(100, 200);
    for (int i = 0; i < docCount; i++) {
        client().prepareIndex("test", "type", "" + i).setSource("body", randomFrom(Arrays.asList("foo", "bar", "baz")), "index", i + 1).get();
    }
    refresh();
    Map<String, Object> params = new HashMap<>();
    params.put("factor", randomIntBetween(2, 4));
    // Test for accessing _score
    Script script = new Script(ScriptType.INLINE, NAME, "log(doc['index'].value + (factor * _score))", params);
    SearchResponse resp = client().prepareSearch("test").setQuery(functionScoreQuery(matchQuery("body", "foo"), new FunctionScoreQueryBuilder.FilterFunctionBuilder[] { new FunctionScoreQueryBuilder.FilterFunctionBuilder(fieldValueFactorFunction("index").factor(2)), new FunctionScoreQueryBuilder.FilterFunctionBuilder(scriptFunction(script)) })).get();
    assertNoFailures(resp);
    SearchHit firstHit = resp.getHits().getAt(0);
    assertThat(firstHit.getScore(), greaterThan(1f));
    // Test for accessing _score.intValue()
    script = new Script(ScriptType.INLINE, NAME, "log(doc['index'].value + (factor * _score.intValue()))", params);
    resp = client().prepareSearch("test").setQuery(functionScoreQuery(matchQuery("body", "foo"), new FunctionScoreQueryBuilder.FilterFunctionBuilder[] { new FunctionScoreQueryBuilder.FilterFunctionBuilder(fieldValueFactorFunction("index").factor(2)), new FunctionScoreQueryBuilder.FilterFunctionBuilder(scriptFunction(script)) })).get();
    assertNoFailures(resp);
    firstHit = resp.getHits().getAt(0);
    assertThat(firstHit.getScore(), greaterThan(1f));
    // Test for accessing _score.longValue()
    script = new Script(ScriptType.INLINE, NAME, "log(doc['index'].value + (factor * _score.longValue()))", params);
    resp = client().prepareSearch("test").setQuery(functionScoreQuery(matchQuery("body", "foo"), new FunctionScoreQueryBuilder.FilterFunctionBuilder[] { new FunctionScoreQueryBuilder.FilterFunctionBuilder(fieldValueFactorFunction("index").factor(2)), new FunctionScoreQueryBuilder.FilterFunctionBuilder(scriptFunction(script)) })).get();
    assertNoFailures(resp);
    firstHit = resp.getHits().getAt(0);
    assertThat(firstHit.getScore(), greaterThan(1f));
    // Test for accessing _score.floatValue()
    script = new Script(ScriptType.INLINE, NAME, "log(doc['index'].value + (factor * _score.floatValue()))", params);
    resp = client().prepareSearch("test").setQuery(functionScoreQuery(matchQuery("body", "foo"), new FunctionScoreQueryBuilder.FilterFunctionBuilder[] { new FunctionScoreQueryBuilder.FilterFunctionBuilder(fieldValueFactorFunction("index").factor(2)), new FunctionScoreQueryBuilder.FilterFunctionBuilder(scriptFunction(script)) })).get();
    assertNoFailures(resp);
    firstHit = resp.getHits().getAt(0);
    assertThat(firstHit.getScore(), greaterThan(1f));
    // Test for accessing _score.doubleValue()
    script = new Script(ScriptType.INLINE, NAME, "log(doc['index'].value + (factor * _score.doubleValue()))", params);
    resp = client().prepareSearch("test").setQuery(functionScoreQuery(matchQuery("body", "foo"), new FunctionScoreQueryBuilder.FilterFunctionBuilder[] { new FunctionScoreQueryBuilder.FilterFunctionBuilder(fieldValueFactorFunction("index").factor(2)), new FunctionScoreQueryBuilder.FilterFunctionBuilder(scriptFunction(script)) })).get();
    assertNoFailures(resp);
    firstHit = resp.getHits().getAt(0);
    assertThat(firstHit.getScore(), greaterThan(1f));
}
Also used : Script(org.elasticsearch.script.Script) FunctionScoreQueryBuilder(org.elasticsearch.index.query.functionscore.FunctionScoreQueryBuilder) SearchHit(org.elasticsearch.search.SearchHit) HashMap(java.util.HashMap) Matchers.containsString(org.hamcrest.Matchers.containsString) SearchResponse(org.elasticsearch.action.search.SearchResponse)

Example 55 with SearchHit

use of org.graylog.shaded.elasticsearch7.org.elasticsearch.search.SearchHit in project elasticsearch by elastic.

the class RandomScoreFunctionIT method testConsistentHitsWithSameSeed.

public void testConsistentHitsWithSameSeed() throws Exception {
    createIndex("test");
    // make sure we are done otherwise preference could change?
    ensureGreen();
    int docCount = randomIntBetween(100, 200);
    for (int i = 0; i < docCount; i++) {
        index("test", "type", "" + i, jsonBuilder().startObject().endObject());
    }
    flush();
    refresh();
    int outerIters = scaledRandomIntBetween(10, 20);
    for (int o = 0; o < outerIters; o++) {
        final int seed = randomInt();
        // at least one char!!
        String preference = randomRealisticUnicodeOfLengthBetween(1, 10);
        // randomPreference should not start with '_' (reserved for known preference types (e.g. _shards, _primary)
        while (preference.startsWith("_")) {
            preference = randomRealisticUnicodeOfLengthBetween(1, 10);
        }
        int innerIters = scaledRandomIntBetween(2, 5);
        SearchHit[] hits = null;
        for (int i = 0; i < innerIters; i++) {
            SearchResponse searchResponse = client().prepareSearch().setSize(// get all docs otherwise we are prone to tie-breaking
            docCount).setPreference(preference).setQuery(functionScoreQuery(matchAllQuery(), randomFunction(seed))).execute().actionGet();
            assertThat("Failures " + Arrays.toString(searchResponse.getShardFailures()), searchResponse.getShardFailures().length, CoreMatchers.equalTo(0));
            final int hitCount = searchResponse.getHits().getHits().length;
            final SearchHit[] currentHits = searchResponse.getHits().getHits();
            ArrayUtil.timSort(currentHits, (o1, o2) -> {
                // for tie-breaking we have to resort here since if the score is
                // identical we rely on collection order which might change.
                int cmp = Float.compare(o1.getScore(), o2.getScore());
                return cmp == 0 ? o1.getId().compareTo(o2.getId()) : cmp;
            });
            if (i == 0) {
                assertThat(hits, nullValue());
                hits = currentHits;
            } else {
                assertThat(hits.length, equalTo(searchResponse.getHits().getHits().length));
                for (int j = 0; j < hitCount; j++) {
                    assertThat("" + j, currentHits[j].getScore(), equalTo(hits[j].getScore()));
                    assertThat("" + j, currentHits[j].getId(), equalTo(hits[j].getId()));
                }
            }
            // randomly change some docs to get them in different segments
            int numDocsToChange = randomIntBetween(20, 50);
            while (numDocsToChange > 0) {
                // watch out this is inclusive the max values!
                int doc = randomInt(docCount - 1);
                index("test", "type", "" + doc, jsonBuilder().startObject().endObject());
                --numDocsToChange;
            }
            flush();
            refresh();
        }
    }
}
Also used : SearchHit(org.elasticsearch.search.SearchHit) Matchers.containsString(org.hamcrest.Matchers.containsString) SearchResponse(org.elasticsearch.action.search.SearchResponse)

Aggregations

SearchHit (org.elasticsearch.search.SearchHit)318 SearchResponse (org.elasticsearch.action.search.SearchResponse)225 SearchHits (org.elasticsearch.search.SearchHits)87 ArrayList (java.util.ArrayList)83 SearchRequestBuilder (org.elasticsearch.action.search.SearchRequestBuilder)64 HashMap (java.util.HashMap)37 Map (java.util.Map)37 BoolQueryBuilder (org.elasticsearch.index.query.BoolQueryBuilder)37 IOException (java.io.IOException)35 Test (org.junit.Test)32 TimeValue (org.elasticsearch.common.unit.TimeValue)29 ElasticsearchAssertions.assertSearchResponse (org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertSearchResponse)25 QueryBuilder (org.elasticsearch.index.query.QueryBuilder)23 SearchRequest (org.elasticsearch.action.search.SearchRequest)22 List (java.util.List)17 IndexRequestBuilder (org.elasticsearch.action.index.IndexRequestBuilder)17 SearchSourceBuilder (org.elasticsearch.search.builder.SearchSourceBuilder)17 SearchHitField (org.elasticsearch.search.SearchHitField)16 HashSet (java.util.HashSet)15 Text (org.elasticsearch.common.text.Text)14