Exemplo n.º 1
0
void Test_Prefix_Fuzzy(QueryEvaluator * queryEvaluator) {
    set<unsigned> resultSet0, resultSet1, resultSet2;
    resultSet0.insert(1007);
    resultSet0.insert(1006);
    resultSet0.insert(1003);
    resultSet0.insert(1005);

    resultSet1.insert(1007);
    resultSet1.insert(1003);
    resultSet1.insert(1005);

    resultSet2.insert(1003);
    resultSet2.insert(1005);
    //resultSet2.insert(4);

    int resultCount = 10;
    // create a query
    Query *query = new Query(srch2is::SearchTypeTopKQuery);
    string keywords[3] = {
            "pionn","fllio","shiii"
    };

    cout << "\n***PREFIX FUZZY***\nQuery:";
    TermType type = TERM_TYPE_PREFIX;
    cout << keywords[0] << "\n";
    Term *term0 = FuzzyTerm::create(keywords[0], type, 1, 1, 2);
    query->add(term0);
    QueryResults *queryResults = new QueryResults(new QueryResultFactory(),
    		queryEvaluator, query);
    LogicalPlan * logicalPlan = prepareLogicalPlanForUnitTests(query , NULL, 0, 10, false, srch2::instantsearch::SearchTypeTopKQuery);
    resultCount = queryEvaluator->search(logicalPlan, queryResults);
    checkResults(queryResults, &resultSet0);

    cout << "\nAdding Term:";
    cout << keywords[1] << "\n";
    Term *term1 = FuzzyTerm::create(keywords[1], type, 1, 1, 2);
    query->add(term1);
    QueryResults *queryResults1 = new QueryResults(new QueryResultFactory(),
    		queryEvaluator, query);
    logicalPlan = prepareLogicalPlanForUnitTests(query , NULL, 0, 10, false, srch2::instantsearch::SearchTypeTopKQuery);
    resultCount = queryEvaluator->search(logicalPlan, queryResults1);
    checkResults(queryResults1, &resultSet1);

    cout << "\nAdding Term:";
    cout << keywords[2] << "\n";
    Term *term2 = FuzzyTerm::create(keywords[2], type, 1, 1, 2);
    query->add(term2);
    QueryResults *queryResults2 = new QueryResults(new QueryResultFactory(),
    		queryEvaluator, query);
    logicalPlan = prepareLogicalPlanForUnitTests(query , NULL, 0, 10, false, srch2::instantsearch::SearchTypeTopKQuery);
    resultCount = queryEvaluator->search(logicalPlan, queryResults2);
    checkResults(queryResults2, &resultSet2);

    delete query;
    delete queryResults;
    delete queryResults1;
    delete queryResults2;

}
Exemplo n.º 2
0
Query* Parser::E() {
  Query* par = new Query(SIGN_OR);
  par->add(T());
  while (!token.compare("OR") || !token.compare("|")) {  // T OR E
    if (!token.compare("OR"))
      match("OR");
    else
      match("|");
    par->add(T());
  }
  if (par->size() == 1) {
    Query* ret = par->get(0);
    par->clear();
    delete par;
    return ret;
  }
  return par;
}
Exemplo n.º 3
0
Query* Parser::T() {
  Query* par = new Query(SIGN_AND);
  par->add(S());
  while (!token.compare("AND") || !token.compare("&")) {  // S AND T
    if (!token.compare("AND"))
      match("AND");
    else
      match("&");
    par->add(S());
  }
  if (par->size() == 1) {
    Query* ret = par->get(0);
    par->clear();
    delete par;
    return ret;
  }
  return par;
}
void fireSearch(QueryEvaluator * queryEvaluator, vector<unsigned> filter, ATTRIBUTES_OP attrOp, unsigned k, const vector<string> &searchKeywords,
                unsigned numOfResults, const vector<string> &resultIds, const vector<vector<vector<unsigned> > > &resultAttributeBitmap)
{
    
    Query *query = new Query(srch2::instantsearch::SearchTypeTopKQuery);
    QueryResultFactory * resultFactory = new QueryResultFactory();
    QueryResults * queryResults = new QueryResults(resultFactory,queryEvaluator, query);

    for (unsigned i = 0; i < searchKeywords.size(); ++i)
    {
        TermType termType = TERM_TYPE_PREFIX;
        Term *term = ExactTerm::create(searchKeywords[i], termType, 1, 0.5);
        term->addAttributesToFilter(filter, attrOp);
        query->setPrefixMatchPenalty(0.95);
        query->add(term);
    }


    LogicalPlan * logicalPlan = prepareLogicalPlanForUnitTests(query , NULL, 0, 10, false, srch2::instantsearch::SearchTypeTopKQuery);
    queryEvaluator->search(logicalPlan , queryResults);
//    QueryEvaluatorRuntimeParametersContainer runTimeParameters;
//    QueryEvaluator * queryEvaluator = new QueryEvaluator(indexer,&runTimeParameters );
    cout << "record found :" << queryResults->getNumberOfResults() << endl;
    ASSERT(queryResults->getNumberOfResults() == numOfResults);

    vector<vector<unsigned> > matchedAttributeBitmap;
    for (unsigned i = 0; i< numOfResults; ++i)
    {
        ASSERT(queryResults->getRecordId(i) == resultIds[i]);
        queryResults->getMatchedAttributes(i, matchedAttributeBitmap);
        for(int j = 0; j< matchedAttributeBitmap.size(); j++)
        	for(int k = 0; k< matchedAttributeBitmap[j].size(); k++)
        		ASSERT(matchedAttributeBitmap[j][k] == resultAttributeBitmap[i][j][k]);
    }

    delete queryResults;
    delete query;
    delete resultFactory;

}
Exemplo n.º 5
0
Query* Parser::S() {
  Query* ret;
  if (!token.compare("(")) {  // (E)
    match("(");
    ret = E();
    match(")");
  } else if (!token.compare("NOT") || !token.compare("!")) {  // NOT *
    if (!token.compare("NOT"))
      match("NOT");
    else
      match("!");

    ret = new Query(SIGN_NOT);
    if (!token.compare("(")) {
      match("(");
      ret->add(E());
      match(")");
    } else {
      ret->add(new Query(token));
      token = next();
    }
  } else if (!token.compare("\"")) {  // " P "
    match("\"");
    ret = new Query(SIGN_PHRSE);
    while (token.compare("\"")) {
      ret->add(new Query(token));
      token = next();
    }
    match("\"");
  } else if (!peek().compare("\\")) { // W \N W
    ret = new Query(SIGN_NEAR);
    ret->add(new Query(token));
    token = next();
    match("\\");
    ret->attr = token;
    ret->add(new Query(next()));
    token = next();
  } else {  // W
    size_t pos = token.find("*");  
    if (pos != string::npos ) {  // wildcard query
      if (token.find("*",pos+1) != string::npos) {
        token.erase(remove(token.begin()+pos+1, token.end(), '*'), token.end());
      }
      ret = new Query(SIGN_WILDCARD);
      ret->token = token;
    } else {  // normal single query
      ret = new Query(token);
    }
    token = next();
    if (!isoperator(token) && !isend()) {  // soft conjunction: A B
      Query* par = new Query(SIGN_OR);
      par->add(ret);
      while (!isoperator(token) && !isend()) {
        ret = new Query(token);
        ret->token = token;
        par->add(ret);
        token = next();
      }
      ret = par;
    }
  }
  return ret;
}
Exemplo n.º 6
0
void Test_Complete_Exact(QueryEvaluator * queryEvaluator) {
    set<unsigned> resultSet0, resultSet1, resultSet2;
    resultSet0.insert(1007);
    resultSet0.insert(1006);
    resultSet0.insert(1003);
    //resultSet0.insert(4);

    resultSet1.insert(1007);
    resultSet1.insert(1003);
    //resultSet1.insert(4);

    resultSet2.insert(1003);
    //resultSet2.insert(3);
    //resultSet2.insert(4);

    int resultCount = 10;
    // create a query
    Query *query = new Query(srch2is::SearchTypeTopKQuery);
    string keywords[3] = { "pink", "floyd", "shine"};

    cout << "\n***COMPLETE EXACT***\nQuery:";
    TermType termType = TERM_TYPE_COMPLETE;
    cout << keywords[0] << "\n";
    Term *term0 = ExactTerm::create(keywords[0], termType, 1, 1);
    query->add(term0);
    QueryResults *queryResults = new QueryResults(new QueryResultFactory(),
            queryEvaluator, query);

    LogicalPlan * logicalPlan = prepareLogicalPlanForUnitTests(query , NULL, 0, 10, false, srch2::instantsearch::SearchTypeTopKQuery);
    resultCount = queryEvaluator->search(logicalPlan, queryResults);
    ASSERT(checkResults(queryResults, &resultSet0) == true);
    printResults(queryResults);

    cout << "\nAdding Term:";
    cout << keywords[1] << "\n";
    Term *term1 = ExactTerm::create(keywords[1], termType, 1, 1);
    query->add(term1);
    QueryResults *queryResults1 = new QueryResults(new QueryResultFactory(),
            queryEvaluator, query);
    logicalPlan = prepareLogicalPlanForUnitTests(query , NULL, 0, 10, false, srch2::instantsearch::SearchTypeTopKQuery);

    resultCount = queryEvaluator->search(logicalPlan, queryResults1);
    checkResults(queryResults1, &resultSet1);
    printResults(queryResults1);

    cout << "\nAdding Term:";
    cout << keywords[2] << "\n";
    Term *term2 = ExactTerm::create(keywords[2], termType, 1, 1);
    query->add(term2);
    QueryResults *queryResults2 = new QueryResults(new QueryResultFactory(),
    		queryEvaluator, query);
    logicalPlan = prepareLogicalPlanForUnitTests(query , NULL, 0, 10, false, srch2::instantsearch::SearchTypeTopKQuery);
    resultCount = queryEvaluator->search(logicalPlan, queryResults2);
    checkResults(queryResults2, &resultSet2);
    printResults(queryResults2);

    delete query;
    delete queryResults;
    delete queryResults1;
    delete queryResults2;
}