Search in sources :

Example 16 with CompiledQueryProfileRegistry

use of com.yahoo.search.query.profile.compiled.CompiledQueryProfileRegistry in project vespa by vespa-engine.

the class QueryProfileTypeTestCase method testTypedAssignmentOfQueryProfileReferencesNonStrict.

/**
 * Tests assigning a subprofile as an id string
 */
public void testTypedAssignmentOfQueryProfileReferencesNonStrict() {
    QueryProfile profile = new QueryProfile("test");
    profile.setType(type);
    QueryProfile map1 = new QueryProfile("myMap1");
    map1.set("key1", "value1", registry);
    QueryProfile map2 = new QueryProfile("myMap2");
    map2.set("key2", "value2", registry);
    QueryProfile myUser = new QueryProfile("myUser");
    myUser.setType(user);
    myUser.set("myUserString", "userValue1", registry);
    myUser.set("myUserInteger", 442, registry);
    registry.register(profile);
    registry.register(map1);
    registry.register(map2);
    registry.register(myUser);
    assertWrongType(profile, "reference to a query profile", "myQueryProfile", "aString");
    registry.register(map1);
    profile.set("myQueryProfile", "myMap1", registry);
    registry.register(map2);
    // NOTICE: Will set as a string because we cannot know this is a reference
    profile.set("someMap", "myMap2", registry);
    assertWrongType(profile, "reference to a query profile of type 'user'", "myUserQueryProfile", "myMap1");
    registry.register(myUser);
    profile.set("myUserQueryProfile", "myUser", registry);
    CompiledQueryProfileRegistry cRegistry = registry.compile();
    CompiledQueryProfile cprofile = cRegistry.getComponent("test");
    assertEquals("value1", cprofile.get("myQueryProfile.key1"));
    assertEquals("myMap2", cprofile.get("someMap"));
    assertNull("Asking for an value which cannot be completely resolved returns null", cprofile.get("someMap.key2"));
    assertEquals("userValue1", cprofile.get("myUserQueryProfile.myUserString"));
    assertEquals(442, cprofile.get("myUserQueryProfile.myUserInteger"));
}
Also used : CompiledQueryProfile(com.yahoo.search.query.profile.compiled.CompiledQueryProfile) QueryProfile(com.yahoo.search.query.profile.QueryProfile) CompiledQueryProfileRegistry(com.yahoo.search.query.profile.compiled.CompiledQueryProfileRegistry) CompiledQueryProfile(com.yahoo.search.query.profile.compiled.CompiledQueryProfile)

Example 17 with CompiledQueryProfileRegistry

use of com.yahoo.search.query.profile.compiled.CompiledQueryProfileRegistry in project vespa by vespa-engine.

the class QueryProfileTypeTestCase method testTypedAssignmentOfQueryProfileReferencesStrictThroughQuery.

/**
 * Tests overriding a subprofile as an id string through the query.
 * Here no user profile is set before it is assigned in the query
 */
public void testTypedAssignmentOfQueryProfileReferencesStrictThroughQuery() {
    QueryProfile profile = new QueryProfile("test");
    profile.setType(typeStrict);
    QueryProfile newUser = new QueryProfile("newUser");
    newUser.setType(userStrict);
    newUser.set("myUserString", "newUserValue1", registry);
    newUser.set("myUserInteger", 845, registry);
    registry.register(profile);
    registry.register(newUser);
    CompiledQueryProfileRegistry cRegistry = registry.compile();
    Query query = new Query(HttpRequest.createTestRequest("?myUserQueryProfile=newUser", com.yahoo.jdisc.http.HttpRequest.Method.GET), cRegistry.getComponent("test"));
    assertEquals(0, query.errors().size());
    assertEquals("newUserValue1", query.properties().get("myUserQueryProfile.myUserString"));
    assertEquals(845, query.properties().get("myUserQueryProfile.myUserInteger"));
    try {
        query.properties().set("myUserQueryProfile.someKey", "value");
        fail("Should not be allowed to set this");
    } catch (IllegalArgumentException e) {
        assertEquals("Could not set 'myUserQueryProfile.someKey' to 'value': 'someKey' is not declared in query profile type 'userStrict', and the type is strict", Exceptions.toMessageString(e));
    }
}
Also used : CompiledQueryProfile(com.yahoo.search.query.profile.compiled.CompiledQueryProfile) QueryProfile(com.yahoo.search.query.profile.QueryProfile) CompiledQueryProfileRegistry(com.yahoo.search.query.profile.compiled.CompiledQueryProfileRegistry) Query(com.yahoo.search.Query)

Example 18 with CompiledQueryProfileRegistry

use of com.yahoo.search.query.profile.compiled.CompiledQueryProfileRegistry in project vespa by vespa-engine.

the class OverrideTestCase method testUnoverridableQueryProfile.

/**
 * Check that a query profile cannot be overridden
 */
public void testUnoverridableQueryProfile() {
    QueryProfileRegistry registry = new QueryProfileRegistry();
    QueryProfile test = new QueryProfile("test");
    test.setType(type);
    registry.register(test);
    QueryProfile myUser = new QueryProfile("user");
    myUser.setType(user);
    myUser.set("myUserInteger", 1, registry);
    myUser.set("myUserString", "userValue", registry);
    test.set("myUserQueryProfile", myUser, registry);
    registry.register(myUser);
    QueryProfile otherUser = new QueryProfile("otherUser");
    otherUser.setType(user);
    otherUser.set("myUserInteger", 2, registry);
    registry.register(otherUser);
    CompiledQueryProfileRegistry cRegistry = registry.compile();
    Query query = new Query(HttpRequest.createTestRequest("?myUserQueryprofile=otherUser", Method.GET), cRegistry.getComponent("test"));
    assertEquals(0, query.errors().size());
    assertEquals(1, query.properties().get("myUserQueryProfile.myUserInteger"));
}
Also used : QueryProfile(com.yahoo.search.query.profile.QueryProfile) CompiledQueryProfileRegistry(com.yahoo.search.query.profile.compiled.CompiledQueryProfileRegistry) Query(com.yahoo.search.Query) CompiledQueryProfileRegistry(com.yahoo.search.query.profile.compiled.CompiledQueryProfileRegistry) QueryProfileRegistry(com.yahoo.search.query.profile.QueryProfileRegistry)

Example 19 with CompiledQueryProfileRegistry

use of com.yahoo.search.query.profile.compiled.CompiledQueryProfileRegistry in project vespa by vespa-engine.

the class QueryFromProfileTestCase method testQueryFromProfile1.

public void testQueryFromProfile1() {
    QueryProfileRegistry registry = new QueryProfileRegistry();
    QueryProfile topLevel = new QueryProfile("topLevel");
    topLevel.setType(registry.getTypeRegistry().getComponent("native"));
    registry.register(topLevel);
    QueryProfile queryBest = new QueryProfile("querybest");
    queryBest.setType(registry.getTypeRegistry().getComponent("model"));
    queryBest.set("queryString", "best", registry);
    registry.register(queryBest);
    CompiledQueryProfileRegistry cRegistry = registry.compile();
    Query query = new Query(HttpRequest.createTestRequest("?model=querybest", Method.GET), cRegistry.getComponent("topLevel"));
    assertEquals("best", query.properties().get("model.queryString"));
    assertEquals("best", query.getModel().getQueryTree().toString());
}
Also used : QueryProfile(com.yahoo.search.query.profile.QueryProfile) CompiledQueryProfileRegistry(com.yahoo.search.query.profile.compiled.CompiledQueryProfileRegistry) Query(com.yahoo.search.Query) CompiledQueryProfileRegistry(com.yahoo.search.query.profile.compiled.CompiledQueryProfileRegistry) QueryProfileRegistry(com.yahoo.search.query.profile.QueryProfileRegistry)

Example 20 with CompiledQueryProfileRegistry

use of com.yahoo.search.query.profile.compiled.CompiledQueryProfileRegistry in project vespa by vespa-engine.

the class MandatoryTestCase method testMandatoryInParentTypeWithInheritance.

@Test
public void testMandatoryInParentTypeWithInheritance() {
    Fixture2 fixture = new Fixture2();
    QueryProfile defaultProfile = new QueryProfile("default");
    defaultProfile.setType(fixture.rootType);
    QueryProfile mandatoryProfile = new QueryProfile("mandatory");
    mandatoryProfile.setType(fixture.rootType);
    // The single difference from the test above
    mandatoryProfile.addInherited(defaultProfile);
    mandatoryProfile.setType(fixture.mandatoryType);
    fixture.registry.register(defaultProfile);
    fixture.registry.register(mandatoryProfile);
    CompiledQueryProfileRegistry cRegistry = fixture.registry.compile();
    assertError("Incomplete query: Parameter 'foobar' is mandatory in query profile 'mandatory' of type 'mandatory-type' but is not set", new Query(QueryTestCase.httpEncode("?queryProfile=mandatory"), cRegistry.getComponent("mandatory")));
}
Also used : QueryProfile(com.yahoo.search.query.profile.QueryProfile) CompiledQueryProfileRegistry(com.yahoo.search.query.profile.compiled.CompiledQueryProfileRegistry) Query(com.yahoo.search.Query) Test(org.junit.Test)

Aggregations

CompiledQueryProfileRegistry (com.yahoo.search.query.profile.compiled.CompiledQueryProfileRegistry)35 Query (com.yahoo.search.Query)33 QueryProfile (com.yahoo.search.query.profile.QueryProfile)22 Test (org.junit.Test)21 CompiledQueryProfile (com.yahoo.search.query.profile.compiled.CompiledQueryProfile)15 QueryProfileXMLReader (com.yahoo.search.query.profile.config.QueryProfileXMLReader)12 QueryProfileRegistry (com.yahoo.search.query.profile.QueryProfileRegistry)7 HttpRequest (com.yahoo.container.jdisc.HttpRequest)3 QueryProfileType (com.yahoo.search.query.profile.types.QueryProfileType)3 QueryProfileConfigurer (com.yahoo.search.query.profile.config.QueryProfileConfigurer)2 HashMap (java.util.HashMap)2 CoreMatchers.containsString (org.hamcrest.CoreMatchers.containsString)2 QueryException (com.yahoo.prelude.query.QueryException)1 CompoundName (com.yahoo.processing.request.CompoundName)1 Properties (com.yahoo.search.query.Properties)1 QueryProfileProperties (com.yahoo.search.query.profile.QueryProfileProperties)1 FieldDescription (com.yahoo.search.query.profile.types.FieldDescription)1 Map (java.util.Map)1