Example #1
0
 /**
  * 
  * @brief xapian query
  * @param array $params
  * @param int $page
  * @param int $pagesize
  */
 public static function searchHospital($disease = '', $province = '', $city = '', $district = '', $street = '', $level = 0, $keyword = '', $page = '', $pagesize = 20, $id = '')
 {
     $page = empty($page) ? 1 : $page;
     if (!self::_connect('/var/www/html/diary/xapian/hospital')) {
         return false;
     }
     //
     if ($keyword) {
         $realQuery = DBScws::cutWord($keyword, true);
     }
     //
     if ($disease) {
         $realQuery[] = 'DISEASE' . $disease;
     }
     //
     if ($province) {
         $realQuery[] = 'PROVINCE' . $province;
     }
     //
     if ($city) {
         $realQuery[] = 'CITY' . $city;
     }
     //
     if ($district) {
         $realQuery[] = 'DISTRICT' . $district;
     }
     //
     if ($street) {
         $realQuery[] = 'STREET' . $street;
     }
     //
     if ($level) {
         $realQuery[] = 'LEVEL' . $level;
     }
     //id
     if ($id) {
         $realQuery[] = 'ID' . $id;
     }
     if (empty($realQuery)) {
         $realQuery[] = 'HOSPITAL' . 'default';
     }
     $queryparser = new XapianQueryParser();
     $queryparser->set_database(self::$_INSTANCE);
     $enquire = new XapianEnquire(self::$_INSTANCE);
     $enquire->set_sort_by_value(0);
     //
     $query = new XapianQuery(XapianQuery::OP_AND, $realQuery);
     $enquire->set_query($query);
     $matches = $enquire->get_mset(0, 4000);
     //
     $start = $matches->begin();
     $end = $matches->end();
     $count = $matches->size();
     $index = 0;
     $re = array();
     while (!$start->equals($end)) {
         $data = array();
         if ($index < $page * $pagesize && $index >= ($page - 1) * $pagesize) {
             $doc = $start->get_document();
             $result = json_decode($doc->get_data(), true);
             $result['phone'] = $result['contact'];
             $r = explode("||", $result['title']);
             $result['title'] = $r[0];
             $r = explode(",", $result['contact']);
             $result['contact'] = $r[0];
             unset($result['puid'], $result['thumb_img'], $result['score'], $result['website'], $result['post_at'], $result['refresh_at'], $result['grab_url'], $result['ad_status'], $result['ad_types'], $result['user_id'], $result['username'], $result['listing_status'], $result['base_tag'], $result['image_count']);
             $re[] = $result;
             /*
             $termStart = $doc->termlist_begin();
                             $termEnd   = $doc->termlist_end();
                             $d['term']='';
                             while (!($termStart->equals($termEnd))) {
                                 $d['term'].= '|'.$termStart->get_term();
                                 $termStart->next();
                             }
                             var_dump($d);
             */
         } elseif ($index >= $page * $pagesize) {
             break;
         }
         $start->next();
         $index++;
     }
     return array($re, $count);
 }
Example #2
0
}
$eset = $enquire->get_eset(100, $rset, XapianEnquire::USE_EXACT_TERMFREQ, 1.0, NULL, 1.9);
$min_wt = 0;
foreach ($eset->begin() as $i => $dummy) {
    $min_wt = $i->get_weight();
}
if ($min_wt < 1.9) {
    print "ESet min_wt threshold not applied\n";
    exit(1);
}
if (XapianQuery::OP_ELITE_SET != 10) {
    print "OP_ELITE_SET is XapianQuery::OP_ELITE_SET not 10\n";
    exit(1);
}
# Regression test - overload resolution involving boolean types failed.
$enq->set_sort_by_value(1, TRUE);
# Regression test - fixed in 0.9.10.1.
$oqparser = new XapianQueryParser();
$oquery = $oqparser->parse_query("I like tea");
# Regression test for bug#192 - fixed in 1.0.3.
$enq->set_cutoff(100);
# Check DateValueRangeProcessor works.
function add_vrp_date(&$qp)
{
    $vrpdate = new XapianDateValueRangeProcessor(1, 1, 1960);
    $qp->add_valuerangeprocessor($vrpdate);
}
$qp = new XapianQueryParser();
add_vrp_date($qp);
$query = $qp->parse_query('12/03/99..12/04/01');
if ($query->get_description() !== 'Query(0 * VALUE_RANGE 1 19991203 20011204)') {
Example #3
0
function search($query, $num = 20) {
	$db = new XapianDatabase(XAPIAN_DIR);
	$enquire = new XapianEnquire($db);

	$stemmer = new XapianStem("english");
	$qp = new XapianQueryParser();
	$valuerange = new XapianNumberValueRangeProcessor(0);

	$qp->set_stemmer($stemmer);
	$qp->set_database($db);
	$qp->set_stemming_strategy(XapianQueryParser::STEM_SOME);
	$qp->set_default_op(Query_OP_AND);
	$qp->add_boolean_prefix('align', 'A');
	$qp->add_boolean_prefix('colour', 'C');
	$qp->add_boolean_prefix('ep', 'E');
	$qp->add_boolean_prefix('noise', 'N');
	$qp->add_boolean_prefix('series', 'S');
	$qp->add_valuerangeprocessor($valuerange);

	$query = $qp->parse_query($query, XapianQueryParser::FLAG_BOOLEAN | XapianQueryParser::FLAG_PHRASE |
        	XapianQueryParser::FLAG_LOVEHATE | XapianQueryParser::FLAG_WILDCARD |
	        XapianQueryParser::FLAG_SPELLING_CORRECTION);

	$enquire->set_query($query);
	$enquire->set_sort_by_value(1, true);
	$matches = $enquire->get_mset(0, $num);

	$desc = $query->get_description();
	$estimate = $matches->get_matches_estimated();

	$out = array();
	$iter = $matches->begin();
	while (!$iter->equals($matches->end())) {
		$doc = $iter->get_document();
		$data = array('text' => $doc->get_data());
		$rank = $iter->get_rank() + 1;
		$termiter = $doc->termlist_begin();
		$terms = array();
		while (!$termiter->equals($doc->termlist_end())) {
			$term = $termiter->get_term();
			$prefix = substr($term, 0, 1);
			if ($prefix == 'A') {
				$data['align'] = substr($term, 1);
			} elseif ($prefix == 'B') {
				$data['begin'] = substr($term, 1);
			} elseif ($prefix == 'C') {
				$data['colour'] = substr($term, 1);
			} elseif ($prefix == 'E') {
				$data['ep'] = substr($term, 1);
			} elseif ($prefix == 'N') {
				$data['noise'] = substr($term, 1);
			} elseif ($prefix == 'I') {
				$data['pos'] = $term;
			} elseif ($prefix == 'S') {
				$data['series'] = substr($term, 1);
			} else {
				$data['terms'][] = $term;
			}
			$termiter->next();
		}
		$out[] = $data;
		$iter->next();
	}

	$db = null;

	return array(
		'query' => $desc,
		'estimate' => $estimate,
		'data' => $out,
	);
}