当前位置: 首页>>代码示例>>PHP>>正文


PHP SphinxClient::SetFieldWeights方法代码示例

本文整理汇总了PHP中SphinxClient::SetFieldWeights方法的典型用法代码示例。如果您正苦于以下问题:PHP SphinxClient::SetFieldWeights方法的具体用法?PHP SphinxClient::SetFieldWeights怎么用?PHP SphinxClient::SetFieldWeights使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在SphinxClient的用法示例。


在下文中一共展示了SphinxClient::SetFieldWeights方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。

示例1: searchTasks

 /**
  *
  * @param string $query
  * @return array of integers - taskIds
  */
 public static function searchTasks($query)
 {
     $fieldWeights = array('description' => 10, 'note' => 6);
     $indexName = 'plancake_tasks';
     $client = new SphinxClient();
     // $client->SetServer (sfConfig::get('app_sphinx_host'), sfConfig::get('app_sphinx_port'));
     $client->SetFilter("author_id", array(PcUserPeer::getLoggedInUser()->getId()));
     $client->SetConnectTimeout(1);
     $client->SetMatchMode(SPH_MATCH_ANY);
     $client->SetSortMode(SPH_SORT_RELEVANCE);
     $client->SetRankingMode(SPH_RANK_PROXIMITY_BM25);
     $client->SetArrayResult(true);
     $client->SetFieldWeights($fieldWeights);
     $client->setLimits(0, 100);
     $results = $client->query($client->EscapeString($query), $indexName);
     if ($results === false) {
         $error = "Sphinx Error - " . $client->GetLastError();
         sfErrorNotifier::alert($error);
     }
     $ids = array();
     if (isset($results['matches']) && count($results['matches'])) {
         foreach ($results['matches'] as $match) {
             $ids[] = $match['id'];
         }
     }
     return PcTaskPeer::retrieveByPKs($ids);
 }
开发者ID:ntemple,项目名称:intelli-plancake,代码行数:32,代码来源:Searcher.php

示例2: SphinxClient

 function hook_search($search)
 {
     $offset = 0;
     $limit = 500;
     $sphinxClient = new SphinxClient();
     $sphinxpair = explode(":", SPHINX_SERVER, 2);
     $sphinxClient->SetServer($sphinxpair[0], (int) $sphinxpair[1]);
     $sphinxClient->SetConnectTimeout(1);
     $sphinxClient->SetFieldWeights(array('title' => 70, 'content' => 30, 'feed_title' => 20));
     $sphinxClient->SetMatchMode(SPH_MATCH_EXTENDED2);
     $sphinxClient->SetRankingMode(SPH_RANK_PROXIMITY_BM25);
     $sphinxClient->SetLimits($offset, $limit, 1000);
     $sphinxClient->SetArrayResult(false);
     $sphinxClient->SetFilter('owner_uid', array($_SESSION['uid']));
     $result = $sphinxClient->Query($search, SPHINX_INDEX);
     $ids = array();
     if (is_array($result['matches'])) {
         foreach (array_keys($result['matches']) as $int_id) {
             $ref_id = $result['matches'][$int_id]['attrs']['ref_id'];
             array_push($ids, $ref_id);
         }
     }
     $ids = join(",", $ids);
     if ($ids) {
         return array("ref_id IN ({$ids})", array());
     } else {
         return array("ref_id = -1", array());
     }
 }
开发者ID:zamentur,项目名称:ttrss_ynh,代码行数:29,代码来源:init.php

示例3: institutions

 private function institutions($data)
 {
     $q = $this->getRequestParameter("q", '');
     if (!$q) {
         throw new BadRequestException('A search string must be provided.');
     }
     $page = $this->getRequestParameter("page", '1');
     $limit = $this->getRequestParameter("limit", self::PAGE_SIZE);
     $culture = $this->getRequestParameter("culture", 'es');
     $type = $this->getRequestParameter("type", false);
     $this->getUser()->setCulture($culture);
     $cl = new SphinxClient();
     $dbConf = Propel::getConfiguration();
     $dsn = $dbConf['datasources']['propel']['connection']['dsn'];
     $sphinxServer = sfConfig::get('sf_sphinx_server');
     $cl->SetServer($sphinxServer, 3312);
     $this->limit = 1000;
     $cl->SetLimits(0, $this->limit, $this->limit);
     $cl->SetArrayResult(true);
     #instituciones
     $this->res = $cl->Query($q, "institucion_{$culture}");
     $cl->SetFieldWeights(array('vanity' => 5));
     $cl->SetSortMode(SPH_SORT_RELEVANCE);
     $institutions = array();
     if ($this->res !== false) {
         if (isset($this->res["matches"]) && is_array($this->res["matches"])) {
             $c = new Criteria();
             $list = array();
             foreach ($this->res["matches"] as $idx => $match) {
                 $list[] = $match['id'];
             }
             $c->add(InstitucionPeer::ID, $list, Criteria::IN);
             $c->addAscendingOrderByColumn(InstitucionPeer::ORDEN);
             //$instituciones = InstitucionPeer::doSelect($c);
             $pager = new sfPropelPager('Institucion', $limit);
             $pager->setCriteria($c);
             $pager->setPage($this->getRequestParameter('page', $page));
             $pager->init();
             foreach ($pager->getResults() as $aInstitution) {
                 $institution = new Institution();
                 $institution->setId($aInstitution->getId());
                 $institution->setVanity($aInstitution->getVanity());
                 $institution->setName($aInstitution->getNombreCorto());
                 $institution->setLongName($aInstitution->getNombre());
                 $institutions[] = $institution;
             }
         }
     }
     return $institutions;
 }
开发者ID:voota,项目名称:voota,代码行数:50,代码来源:actions.class.php

示例4: set_keywords

 /**
  * @{inheritDoc}
  */
 public function set_keywords($keywords, $search_title, $search_text)
 {
     $this->keywords = $this->clean_string($keywords);
     if (!$search_title && $search_text) {
         $this->client->SetFieldWeights(array('title' => 1, 'data' => 5));
         $this->search_query_prefix = '@data ';
     } else {
         if ($search_title && !$search_text) {
             $this->client->SetFieldWeights(array('title' => 5, 'data' => 1));
             $this->search_query_prefix = '@title ';
         }
     }
     return $this;
 }
开发者ID:Sajaki,项目名称:customisation-db,代码行数:17,代码来源:fulltext_sphinx.php

示例5: resetClient

 protected function resetClient()
 {
     $this->sphinxClient->ResetFilters();
     $this->sphinxClient->ResetGroupBy();
     $this->sphinxClient->ResetOverrides();
     $this->sphinxClient->SetLimits(0, 20);
     $this->sphinxClient->SetArrayResult(true);
     $this->sphinxClient->SetFieldWeights(array());
     $this->sphinxClient->SetIDRange(0, 0);
     $this->sphinxClient->SetIndexWeights(array());
     $this->sphinxClient->SetMatchMode(SPH_MATCH_EXTENDED2);
     $this->sphinxClient->SetRankingMode(SPH_RANK_NONE);
     $this->sphinxClient->SetSortMode(SPH_SORT_RELEVANCE, "");
     $this->sphinxClient->SetSelect("*");
 }
开发者ID:jerrylsxu,项目名称:yii-sphinx,代码行数:15,代码来源:ESphinxConnection.php

示例6: array

 function draw2()
 {
     $keywords = AZLib::getParam('keywords');
     $total_item = 0;
     $search_result = false;
     $items = array();
     $paging = '';
     $cmd = '';
     $cat_search_id = 0;
     $item_array = array();
     $listCat = array();
     if ($keywords) {
         //AZLib::getCats();
         require "./includes/sphinxapi.class.php";
         foreach (CGlobal::$allCategories as $value) {
             if ($value['parent_id'] == 0) {
                 $cat_list[$value['id']] = $value['brief_name'];
             }
         }
         $category = $this->getTotalPerCategory($keywords);
         foreach ($category as $row) {
             $row['brief_name'] = isset($cat_list[$row['level_1_catid']]) && $cat_list[$row['level_1_catid']] ? $cat_list[$row['level_1_catid']] : "Khác";
             $listCat[$row['level_1_catid']] = array("level_1_catid" => $row["level_1_catid"], "brief_name" => $row['brief_name'], "count_ad" => $row['@count']);
         }
         $total = 0;
         $catid = 0;
         $catActive = '';
         $total_cat = 0;
         if ($listCat) {
             $first_val = array_slice($listCat, 0, 1);
             $total = $first_val[0]['count_ad'];
             $catid = $first_val[0]['level_1_catid'];
             $catActive = $first_val[0]['brief_name'];
             $total_cat = count($listCat);
         }
         $i = 0;
         $allrecord = 0;
         $otherCat = '';
         $cat_content = "";
         foreach ($listCat as $cat) {
             if ($i < 3) {
                 $active = $i == 0 ? "class=\"active\"" : "";
                 $cat_content .= "<li id=\"tab_{$i}\" {$active} onclick=\"javascript:acive_tab_cat(this);\"><a href=\"javascript:void(0);\" onclick=\"javascript:search_cat({$cat['level_1_catid']},{$cat['count_ad']},1,0);\"><span id=\"kby_{$cat['level_1_catid']}\">" . $cat['brief_name'] . " <font style=\"color: #5a7e92;font-weight: normal;\">(" . $cat['count_ad'] . ")</font></span></a></li>";
             } else {
                 $otherCat .= "<div class=\"other\"><a href=\"javascript:void(0);\" onclick=\"javascript:search_cat({$cat['level_1_catid']},{$cat['count_ad']},1,0);acive_tab_cat(this);\" id=\"tab_{$i}\"><span id=\"kby_{$cat['level_1_catid']}\">" . $cat['brief_name'] . " <font style=\"color: #5a7e92;font-weight: normal;\">(" . $cat['count_ad'] . ")</font></span></a></div>";
             }
             $i++;
             $allrecord = $allrecord + $cat['count_ad'];
         }
         $display->add("cat_content", $cat_content);
         $display->add("CatActiveId", $catid);
         $display->add("catActive", $catActive);
         $display->add("listCat", $listCat);
         $display->add("allrecord", $allrecord);
         $display->add("otherCat", str_replace(array(chr(13), chr(10)), "", $otherCat));
         $display->add("total_cat", $total_cat);
         //Init for sphinx search paging
         $pager = new Pager();
         //config
         $limit = SEARCH_LIMIT;
         $pager->type = "search";
         $pager->catid = $catid;
         $pager->total = $total;
         $pager->limit = $limit;
         $pager->page_param = 'page';
         $pager->page = 1;
         $offset = $pager->get_offset();
         $limit_from = $pager->limit_from();
         $limit_to = $pager->limit_to();
         //Sphinx search by Nova
         $q = $keywords;
         $mode = SPH_MATCH_EXTENDED2;
         //Init config
         $host = SPHINX_SERVER;
         $port = SPHINX_PORT;
         //$index 		= SPHINX_INDEX;
         $index = "enbac delta";
         $filtervals = array();
         $ranker = SPH_RANK_WORDCOUNT;
         $cl = new SphinxClient();
         $cl->SetServer($host, $port);
         $cl->SetConnectTimeout(1);
         $cl->SetWeights(array(100, 1));
         $cl->SetMatchMode($mode);
         //filter
         if ($catid) {
             $cl->SetFilter('level_1_catid', array($catid));
         }
         $cl->SetFilter('status', array('1'));
         $cl->SetFieldWeights(array('user_name' => 10000, 'name' => 1000, 'description' => 1));
         //$cl->SetSortMode( SPH_SORT_EXTENDED, 'up_time DESC' );
         //$cl->SetSortMode( SPH_SORT_RELEVANCE);//Sort theo kq chính xác nhất
         //$cl->SetSortMode ( SPH_SORT_EXPR, "@weight + ( user_karma + ln(pageviews) )*0.1");
         $cl->SetSortMode(SPH_SORT_EXPR, "@weight");
         //Sort theo trọng số
         //SPH_RANK_WORDCOUNT
         //SPH_MATCH_EXTENDED2
         //end filter
         $cl->SetLimits($offset, $limit, 10000);
         $cl->SetRankingMode($ranker);
//.........这里部分代码省略.........
开发者ID:duynhan07,项目名称:elink,代码行数:101,代码来源:sphinx_search.php

示例7: keyword_search

 /**
  * Performs a search on keywords depending on display specific params. You have to run split_keywords() first
  *
  * @param	string		$type				contains either posts or topics depending on what should be searched for
  * @param	string		$fields				contains either titleonly (topic titles should be searched), msgonly (only message bodies should be searched), firstpost (only subject and body of the first post should be searched) or all (all post bodies and subjects should be searched)
  * @param	string		$terms				is either 'all' (use query as entered, words without prefix should default to "have to be in field") or 'any' (ignore search query parts and just return all posts that contain any of the specified words)
  * @param	array		$sort_by_sql		contains SQL code for the ORDER BY part of a query
  * @param	string		$sort_key			is the key of $sort_by_sql for the selected sorting
  * @param	string		$sort_dir			is either a or d representing ASC and DESC
  * @param	string		$sort_days			specifies the maximum amount of days a post may be old
  * @param	array		$ex_fid_ary			specifies an array of forum ids which should not be searched
  * @param	string		$post_visibility	specifies which types of posts the user can view in which forums
  * @param	int			$topic_id			is set to 0 or a topic id, if it is not 0 then only posts in this topic should be searched
  * @param	array		$author_ary			an array of author ids if the author should be ignored during the search the array is empty
  * @param	string		$author_name		specifies the author match, when ANONYMOUS is also a search-match
  * @param	array		&$id_ary			passed by reference, to be filled with ids for the page specified by $start and $per_page, should be ordered
  * @param	int			$start				indicates the first index of the page
  * @param	int			$per_page			number of ids each page is supposed to contain
  * @return	boolean|int						total number of results
  */
 public function keyword_search($type, $fields, $terms, $sort_by_sql, $sort_key, $sort_dir, $sort_days, $ex_fid_ary, $post_visibility, $topic_id, $author_ary, $author_name, &$id_ary, &$start, $per_page)
 {
     // No keywords? No posts.
     if (!strlen($this->search_query) && !sizeof($author_ary)) {
         return false;
     }
     $id_ary = array();
     $join_topic = $type != 'posts';
     // Sorting
     if ($type == 'topics') {
         switch ($sort_key) {
             case 'a':
                 $this->sphinx->SetGroupBy('topic_id', SPH_GROUPBY_ATTR, 'poster_id ' . ($sort_dir == 'a' ? 'ASC' : 'DESC'));
                 break;
             case 'f':
                 $this->sphinx->SetGroupBy('topic_id', SPH_GROUPBY_ATTR, 'forum_id ' . ($sort_dir == 'a' ? 'ASC' : 'DESC'));
                 break;
             case 'i':
             case 's':
                 $this->sphinx->SetGroupBy('topic_id', SPH_GROUPBY_ATTR, 'post_subject ' . ($sort_dir == 'a' ? 'ASC' : 'DESC'));
                 break;
             case 't':
             default:
                 $this->sphinx->SetGroupBy('topic_id', SPH_GROUPBY_ATTR, 'topic_last_post_time ' . ($sort_dir == 'a' ? 'ASC' : 'DESC'));
                 break;
         }
     } else {
         switch ($sort_key) {
             case 'a':
                 $this->sphinx->SetSortMode($sort_dir == 'a' ? SPH_SORT_ATTR_ASC : SPH_SORT_ATTR_DESC, 'poster_id');
                 break;
             case 'f':
                 $this->sphinx->SetSortMode($sort_dir == 'a' ? SPH_SORT_ATTR_ASC : SPH_SORT_ATTR_DESC, 'forum_id');
                 break;
             case 'i':
             case 's':
                 $this->sphinx->SetSortMode($sort_dir == 'a' ? SPH_SORT_ATTR_ASC : SPH_SORT_ATTR_DESC, 'post_subject');
                 break;
             case 't':
             default:
                 $this->sphinx->SetSortMode($sort_dir == 'a' ? SPH_SORT_ATTR_ASC : SPH_SORT_ATTR_DESC, 'post_time');
                 break;
         }
     }
     // Most narrow filters first
     if ($topic_id) {
         $this->sphinx->SetFilter('topic_id', array($topic_id));
     }
     $search_query_prefix = '';
     switch ($fields) {
         case 'titleonly':
             // Only search the title
             if ($terms == 'all') {
                 $search_query_prefix = '@title ';
             }
             // Weight for the title
             $this->sphinx->SetFieldWeights(array("title" => 5, "data" => 1));
             // 1 is first_post, 0 is not first post
             $this->sphinx->SetFilter('topic_first_post', array(1));
             break;
         case 'msgonly':
             // Only search the body
             if ($terms == 'all') {
                 $search_query_prefix = '@data ';
             }
             // Weight for the body
             $this->sphinx->SetFieldWeights(array("title" => 1, "data" => 5));
             break;
         case 'firstpost':
             // More relative weight for the title, also search the body
             $this->sphinx->SetFieldWeights(array("title" => 5, "data" => 1));
             // 1 is first_post, 0 is not first post
             $this->sphinx->SetFilter('topic_first_post', array(1));
             break;
         default:
             // More relative weight for the title, also search the body
             $this->sphinx->SetFieldWeights(array("title" => 5, "data" => 1));
             break;
     }
     if (sizeof($author_ary)) {
//.........这里部分代码省略.........
开发者ID:Voxel37,项目名称:phpbb,代码行数:101,代码来源:fulltext_sphinx.php

示例8: search

 /**
  * Does an index search via Sphinx and returns the results
  *
  * @param string $type Search type.  Valid types are: author, title, series, subject, keyword (default)
  * @param string $term Search term/phrase
  * @param int $limit Number of results to return
  * @param int $offset Where to begin result set -- for pagination purposes
  * @param array $sort_array Numerically keyed array of sort parameters.  Valid options are: newest, oldest
  * @param array $location_array Numerically keyed array of location params.  NOT IMPLEMENTED YET
  * @param array $facet_args String-keyed array of facet parameters. See code below for array structure
  * @return array String-keyed result set
  */
 public function search($type, $term, $limit, $offset, $sort_opt = NULL, $format_array = array(), $location_array = array(), $facet_args = array(), $override_search_filter = FALSE, $limit_available = FALSE, $show_inactive = FALSE)
 {
     if (is_callable(array(__CLASS__ . '_hook', __FUNCTION__))) {
         eval('$hook = new ' . __CLASS__ . '_hook;');
         return $hook->{__FUNCTION__}($type, $term, $limit, $offset, $sort_opt, $format_array, $location_array, $facet_args, $override_search_filter, $limit_available);
     }
     require_once $this->locum_config['sphinx_config']['api_path'] . '/sphinxapi.php';
     $db =& MDB2::connect($this->dsn);
     $term_arr = explode('?', trim(preg_replace('/\\//', ' ', $term)));
     $term = trim($term_arr[0]);
     if ($term == '*' || $term == '**') {
         $term = '';
     } else {
         $term_prestrip = $term;
         //$term = preg_replace('/[^A-Za-z0-9*\- ]/iD', '', $term);
         $term = preg_replace('/\\*\\*/', '*', $term);
         //fix for how iii used to do wildcards
     }
     $final_result_set['term'] = $term;
     $final_result_set['type'] = trim($type);
     $cl = new SphinxClient();
     $cl->SetServer($this->locum_config['sphinx_config']['server_addr'], (int) $this->locum_config['sphinx_config']['server_port']);
     // Defaults to 'keyword', non-boolean
     $bool = FALSE;
     $cl->SetMatchMode(SPH_MATCH_ALL);
     if (!$term) {
         // Searches for everything (usually for browsing purposes--Hot/New Items, etc..)
         $cl->SetMatchMode(SPH_MATCH_EXTENDED2);
     } else {
         $picturebook = array('picturebook', 'picture book');
         $picbk_search = '(@callnum ^E)';
         $term = str_ireplace($picturebook, $picbk_search, $term);
         if ($type == 'keyword') {
             // Custom fiction and non-fiction search
             $nonfic_search = ' (@callnum "0*" | @callnum "1*" | @callnum "2*" | @callnum "3*" | @callnum "4*" | @callnum "5*" | @callnum "6*" | @callnum "7*" | @callnum "8*" | @callnum "9*")';
             $fiction_search = ' (@title fiction | @subjects fiction | @callnum mystery | @callnum fantasy | @callnum fiction | @callnum western | @callnum romance)';
             if (stripos($term, 'nonfiction') !== FALSE) {
                 $term = '@@relaxed ' . str_ireplace('nonfiction', '', $term) . $nonfic_search;
             } else {
                 if (strpos($term, 'non-fiction') !== FALSE) {
                     $term = '@@relaxed ' . str_ireplace('non-fiction', '', $term) . $nonfic_search;
                 } else {
                     if (strpos($term, 'fiction') !== FALSE) {
                         $term = '@@relaxed ' . str_ireplace('fiction', '', $term) . $fiction_search;
                     }
                 }
             }
         }
         // Is it a boolean search?
         if (preg_match("/ \\| /i", $term) || preg_match("/ \\-/i", $term) || preg_match("/ \\!/i", $term)) {
             $cl->SetMatchMode(SPH_MATCH_BOOLEAN);
             $bool = TRUE;
         }
         if (preg_match("/ OR /i", $term)) {
             $cl->SetMatchMode(SPH_MATCH_BOOLEAN);
             $term = preg_replace('/ OR /i', ' | ', $term);
             $bool = TRUE;
         }
         // Is it a phrase search?
         if (preg_match("/\"/i", $term) || preg_match("/\\@/i", $term)) {
             $cl->SetMatchMode(SPH_MATCH_EXTENDED2);
             $bool = TRUE;
         }
     }
     // Set up for the various search types
     switch ($type) {
         case 'author':
             $cl->SetFieldWeights(array('author' => 50, 'addl_author' => 30));
             $idx = 'bib_items_author';
             break;
         case 'title':
             $cl->SetFieldWeights(array('title' => 50, 'title_medium' => 50, 'series' => 30));
             $idx = 'bib_items_title';
             break;
         case 'series':
             $cl->SetFieldWeights(array('title' => 5, 'series' => 80));
             $idx = 'bib_items_title';
             break;
         case 'subject':
             $idx = 'bib_items_subject';
             break;
         case 'callnum':
             $cl->SetFieldWeights(array('callnum' => 100));
             $idx = 'bib_items_callnum';
             //$cl->SetMatchMode(SPH_MATCH_ANY);
             break;
         case 'tags':
             $cl->SetFieldWeights(array('tag_idx' => 100));
//.........这里部分代码省略.........
开发者ID:aadl,项目名称:locum,代码行数:101,代码来源:locum-client.php

示例9: SphinxClient

require DISCUZ_ROOT . './include/sphinxapi.php';
$sp_host = '192.168.0.120';
$sp_port = 3312;
$cl = new SphinxClient();
//设置服务器
$cl->SetServer($sp_host, $sp_port);
//设置搜索模式(处理空格的和关系)
if (preg_match('|\\s+|', $key)) {
    $cl->SetMatchMode(SPH_MATCH_ALL);
} else {
    $cl->SetMatchMode(SPH_MATCH_PHRASE);
}
if ($srchtype == 'fulltext') {
    //设置个字段权重
    $weight = array('subject' => 70, 'message' => 30);
    $cl->SetFieldWeights($weight);
    $sp_index = 'dzbbs;dzbbs_delta';
    $sp_hightlight_index = 'dzbbs';
} else {
    $weight = array('subject' => 100);
    $sp_index = 'threads;threads_delta';
    $sp_hightlight_index = 'threads';
}
$cl->SetFieldWeights($weight);
//帖子作者
if (!empty($srchuid)) {
    $cl->setfilter('authorid', array($srchuid));
}
if ($srchtype == 'title') {
    //特殊主题:	投票主题   商品主题   悬赏主题   活动主题   辩论主题   视频主题
    $sp_special_filter = array(1, 2, 3, 4, 5, 6);
开发者ID:junsgo,项目名称:sphinx-for-discuz,代码行数:31,代码来源:search_sphinx.inc.php

示例10: keyword_search

 /**
  * Performs a search on keywords depending on display specific params. You have to run split_keywords() first
  *
  * @param	string		$type				contains either posts or topics depending on what should be searched for
  * @param	string		$fields				contains either titleonly (topic titles should be searched), msgonly (only message bodies should be searched), firstpost (only subject and body of the first post should be searched) or all (all post bodies and subjects should be searched)
  * @param	string		$terms				is either 'all' (use query as entered, words without prefix should default to "have to be in field") or 'any' (ignore search query parts and just return all posts that contain any of the specified words)
  * @param	array		$sort_by_sql		contains SQL code for the ORDER BY part of a query
  * @param	string		$sort_key			is the key of $sort_by_sql for the selected sorting
  * @param	string		$sort_dir			is either a or d representing ASC and DESC
  * @param	string		$sort_days			specifies the maximum amount of days a post may be old
  * @param	array		$ex_fid_ary			specifies an array of forum ids which should not be searched
  * @param	string		$post_visibility	specifies which types of posts the user can view in which forums
  * @param	int			$topic_id			is set to 0 or a topic id, if it is not 0 then only posts in this topic should be searched
  * @param	array		$author_ary			an array of author ids if the author should be ignored during the search the array is empty
  * @param	string		$author_name		specifies the author match, when ANONYMOUS is also a search-match
  * @param	array		&$id_ary			passed by reference, to be filled with ids for the page specified by $start and $per_page, should be ordered
  * @param	int			$start				indicates the first index of the page
  * @param	int			$per_page			number of ids each page is supposed to contain
  * @return	boolean|int						total number of results
  */
 public function keyword_search($type, $fields, $terms, $sort_by_sql, $sort_key, $sort_dir, $sort_days, $ex_fid_ary, $post_visibility, $topic_id, $author_ary, $author_name, &$id_ary, &$start, $per_page)
 {
     global $user, $phpbb_log;
     // No keywords? No posts.
     if (!strlen($this->search_query) && !sizeof($author_ary)) {
         return false;
     }
     $id_ary = array();
     // Sorting
     if ($type == 'topics') {
         switch ($sort_key) {
             case 'a':
                 $this->sphinx->SetGroupBy('topic_id', SPH_GROUPBY_ATTR, 'poster_id ' . ($sort_dir == 'a' ? 'ASC' : 'DESC'));
                 break;
             case 'f':
                 $this->sphinx->SetGroupBy('topic_id', SPH_GROUPBY_ATTR, 'forum_id ' . ($sort_dir == 'a' ? 'ASC' : 'DESC'));
                 break;
             case 'i':
             case 's':
                 $this->sphinx->SetGroupBy('topic_id', SPH_GROUPBY_ATTR, 'post_subject ' . ($sort_dir == 'a' ? 'ASC' : 'DESC'));
                 break;
             case 't':
             default:
                 $this->sphinx->SetGroupBy('topic_id', SPH_GROUPBY_ATTR, 'topic_last_post_time ' . ($sort_dir == 'a' ? 'ASC' : 'DESC'));
                 break;
         }
     } else {
         switch ($sort_key) {
             case 'a':
                 $this->sphinx->SetSortMode($sort_dir == 'a' ? SPH_SORT_ATTR_ASC : SPH_SORT_ATTR_DESC, 'poster_id');
                 break;
             case 'f':
                 $this->sphinx->SetSortMode($sort_dir == 'a' ? SPH_SORT_ATTR_ASC : SPH_SORT_ATTR_DESC, 'forum_id');
                 break;
             case 'i':
             case 's':
                 $this->sphinx->SetSortMode($sort_dir == 'a' ? SPH_SORT_ATTR_ASC : SPH_SORT_ATTR_DESC, 'post_subject');
                 break;
             case 't':
             default:
                 $this->sphinx->SetSortMode($sort_dir == 'a' ? SPH_SORT_ATTR_ASC : SPH_SORT_ATTR_DESC, 'post_time');
                 break;
         }
     }
     // Most narrow filters first
     if ($topic_id) {
         $this->sphinx->SetFilter('topic_id', array($topic_id));
     }
     /**
      * Allow modifying the Sphinx search options
      *
      * @event core.search_sphinx_keywords_modify_options
      * @var	string	type				Searching type ('posts', 'topics')
      * @var	string	fields				Searching fields ('titleonly', 'msgonly', 'firstpost', 'all')
      * @var	string	terms				Searching terms ('all', 'any')
      * @var	int		sort_days			Time, in days, of the oldest possible post to list
      * @var	string	sort_key			The sort type used from the possible sort types
      * @var	int		topic_id			Limit the search to this topic_id only
      * @var	array	ex_fid_ary			Which forums not to search on
      * @var	string	post_visibility		Post visibility data
      * @var	array	author_ary			Array of user_id containing the users to filter the results to
      * @var	string	author_name			The username to search on
      * @var	object	sphinx				The Sphinx searchd client object
      * @since 3.1.7-RC1
      */
     $sphinx = $this->sphinx;
     $vars = array('type', 'fields', 'terms', 'sort_days', 'sort_key', 'topic_id', 'ex_fid_ary', 'post_visibility', 'author_ary', 'author_name', 'sphinx');
     extract($this->phpbb_dispatcher->trigger_event('core.search_sphinx_keywords_modify_options', compact($vars)));
     $this->sphinx = $sphinx;
     unset($sphinx);
     $search_query_prefix = '';
     switch ($fields) {
         case 'titleonly':
             // Only search the title
             if ($terms == 'all') {
                 $search_query_prefix = '@title ';
             }
             // Weight for the title
             $this->sphinx->SetFieldWeights(array("title" => 5, "data" => 1));
             // 1 is first_post, 0 is not first post
//.........这里部分代码省略.........
开发者ID:bruninoit,项目名称:phpbb,代码行数:101,代码来源:fulltext_sphinx.php

示例11: getList

 /**
  * ¬озвращает список публичных типовых услуг по заданным услови¤м и пагинацией
  * 
  * @return array
  */
 public function getList($excluded_ids = array())
 {
     $criteria = array($this->category_id, $this->city_id, $this->country_id, $this->keywords, $this->limit, $this->offset, $this->price_ranges, $this->price_max, $this->order, $excluded_ids, $this->user_id);
     $membuf = new memBuff();
     $memkey = __METHOD__ . '#' . md5(serialize($criteria));
     if (false !== ($result = $membuf->get($memkey)) && is_release()) {
         return $result;
     }
     $sort = $this->getSort();
     # @see http://sphinxsearch.com/forum/view.html?id=11538 about city = x or country = y
     $sphinxClient = new SphinxClient();
     $sphinxClient->SetServer(SEARCHHOST, SEARCHPORT);
     $sphinxClient->SetLimits($this->offset, $this->limit, 20000);
     $sphinxClient->SetSortMode(SPH_SORT_EXTENDED, $sort);
     $sphinxClient->SetFieldWeights(array('title' => 2, 'extra_title' => 1));
     //$sphinxClient->SetRankingMode(SPH_RANK_PROXIMITY_BM25);
     $selectExpression = '*';
     // все колонки
     if ($this->user_id) {
         $selectExpression .= ", IF(user_id = {$this->user_id}, 1, 0) as match_user";
         $sphinxClient->setFilter('match_user', array(1));
     }
     if ($this->category_id) {
         $selectExpression .= ", IF(category_id = {$this->category_id} or category_parent_id = {$this->category_id}, 1, 0) as match_category";
         $sphinxClient->setFilter('match_category', array(1));
     }
     if ($this->country_id) {
         $selectExpression .= ", IF(user_country_id = {$this->country_id} or country_id = {$this->country_id}, 1, 0) as match_country";
         $sphinxClient->setFilter('match_country', array(1));
     }
     if ($this->city_id) {
         $selectExpression .= ", IF(user_city_id = {$this->city_id} or city_id = {$this->city_id}, 1, 0) as match_city";
         $sphinxClient->setFilter('match_city', array(1));
     }
     if (count($this->price_ranges)) {
         $match_price_exprs = array();
         foreach ($this->getPriceRanges() as $i => $price_range) {
             if (!isset($this->price_ranges[$i])) {
                 continue;
             }
             $match_price_exprs[] = "price_{$i} = 1";
         }
         $match_price_exprs = implode(' or ', $match_price_exprs);
         $selectExpression .= ", IF({$match_price_exprs}, 1, 0) as match_price";
         $sphinxClient->setFilter('match_price', array(1));
     }
     if ($this->price_max > 0) {
         $selectExpression .= ", IF(price <= {$this->price_max}, 1, 0) as match_price_max";
         $sphinxClient->setFilter('match_price_max', array(1));
     }
     $searchString = '';
     if (!empty($this->keywords)) {
         $keywords = implode(' ', array_filter(preg_split('/\\s*,\\s*/', $this->keywords)));
         $searchString = trim($keywords);
         //$searchString = $this->GetSphinxKeyword($searchString);
         $sphinxClient->SetMatchMode(SPH_MATCH_ANY);
         //SPH_MATCH_EXTENDED2);
     }
     if (count($excluded_ids)) {
         $sphinxClient->setFilter('tservice_id', $excluded_ids, true);
     }
     $sphinxClient->SetSelect($selectExpression);
     $queryResult = $sphinxClient->query($searchString, "tservices;delta_tservices");
     //echo '<pre>error: ', $sphinxClient->GetLastError(), '</pre>';
     //echo '<pre>warn : ', $sphinxClient->GetLastWarning(), '</pre>';
     $list = array();
     $total = 0;
     if (isset($queryResult['matches'])) {
         foreach ($queryResult['matches'] as $id => $row) {
             $row['attrs']['id'] = $id;
             $list[] = $row['attrs'];
         }
         $total = $queryResult['total_found'] < $queryResult['total'] ? $queryResult['total_found'] : $queryResult['total'];
     }
     $result = array('list' => $list, 'total' => $total);
     if ($this->_ttl) {
         $membuf->set($memkey, $result, $this->_ttl);
     }
     return $result;
 }
开发者ID:Nikitian,项目名称:fl-ru-damp,代码行数:85,代码来源:tservices_catalog.php

示例12: SphinxClient

<?php

require "spec/fixtures/sphinxapi.php";
$cl = new SphinxClient();
$cl->SetFieldWeights(array('field1' => 10, 'field2' => 20));
$cl->Query('query');
开发者ID:alpbs,项目名称:sphinx,代码行数:6,代码来源:field_weights.php

示例13: setFieldWeights

 /**
  * 设置字段权重.  $weights should look like:
  *
  * $weights = array(
  *   'Normal field name' => 1,
  *   'Important field name' => 10,
  * );
  *
  * @param array $weights Array of field weights.
  */
 function setFieldWeights($weights)
 {
     $this->sphinx->SetFieldWeights($weights);
     return $this;
 }
开发者ID:290329416,项目名称:guahao,代码行数:15,代码来源:sphinxsearch.php

示例14: letterForAbbriviature

 /**
  * Фильтр по аббривиатурам
  *
  * @Route("/ajax/abbr/{string}", name="ajax_abbr", defaults = {"string" = null})
  */
 public function letterForAbbriviature(Request $request, $string = null)
 {
     if (!$string) {
         $string = $request->query->get('string');
     }
     $type = $request->query->has('type') ? $request->query->get('type') : 'publication';
     $order = $request->query->get('order', '') == 'relevant' ? 'relevant' : 'created';
     //$order = $request->query->get('order', '') == 'created' ? 'created' : 'relevant';
     $page = $request->query->has('page') ? $request->query->get('page') : $request->query->get('p', 1);
     $page = intval($page);
     # удаляем лишние символы и пробелы
     $string = preg_replace('/[^a-zа-я\\s]/iu', ' ', $string);
     $string = preg_replace('/\\s+/iu', ' ', $string);
     $params = array('search' => $string);
     $params['string'] = $string;
     $params['type'] = $type;
     $params['order'] = $order;
     $params['page'] = $page;
     $params['currentPage'] = $page;
     if ($page < 1) {
         throw $this->createNotFoundException('Incorrect page number: ' . $page);
     }
     # удаляем лишние символы из запроса
     $string = preg_replace('/[^a-zа-я0-9-, :\\.\\(\\)]/iu', '', $string);
     $string = preg_replace('/[,:\\.\\(\\)]/', ' ', $string);
     # проверка, есть ли поисковое слово
     if (mb_strlen(trim($string), 'utf-8') < 2) {
         return $this->render('EvrikaMainBundle:Search:search_error.html.twig');
     }
     # разбиваем на слова, отсекаем окончания
     if (!preg_match('/[A-Z]/', $string) && !preg_match('/[А-Я]/u', $string)) {
         # берем основу слов, если нету собственных имен (заглавных)
         $string = $this->get('evrika.lingua_stem')->stem_string($string);
     }
     # каждое слово дополняется с конца звездочкой (wildcard), разделитеть - ИЛИ
     $words = explode(' ', $string);
     # клиентский запрос
     $s = new \SphinxClient();
     $s->SetServer("localhost", 9312);
     // должна быть запущена служба по порту: searchd --config /c/sphinx/shinx.cnf
     //$s->SetRankingMode(SPH_RANK_PROXIMITY);
     $s->SetMatchMode(SPH_MATCH_EXTENDED2);
     // SPH_MATCH_ALL will match all words in the search term
     $s->SetArrayResult(true);
     $s->SetLimits(($page - 1) * self::SEARCH_PER_PAGE, self::SEARCH_PER_PAGE);
     # получаем результаты поиска
     if ($order == 'created') {
         $s->setSortMode(SPH_SORT_EXTENDED, 'created DESC');
     } else {
         $s->SetFieldWeights(array('title' => 10, 'shortText' => 3, 'body' => 1));
         $s->SetSortMode('SPH_SORT_EXTENDED', '@weight desc, mydate desc, @id asc');
     }
     # находим публикации по всем введенным словам
     $query = implode('* &', $words) . '*';
     $s_publications = $s->Query("@(title,shortText,body) {$query} & @type=publication", 'publication');
     if (!isset($s_publications['matches'])) {
         # если не нашли - находим по любому из слов
         $query = implode('* |', $words) . '*';
         $s_publications = $s->Query("@(title,shortText,body) {$query} & @type=publication", 'publication');
     }
     # находим события по всем введенным словам
     $s_events = $s->Query("@(title,shortText,body) {$query} & @type=event", 'publication');
     if (!isset($s_events['matches'])) {
         # если не нашли - находим по любому из слов
         $query = implode('* |', $words) . '*';
         $s_events = $s->Query("@(title,shortText,body) {$query} & @type=event", 'publication');
     }
     # если поймали ошибку
     $error = $s->GetLastError();
     if (!empty($error)) {
         throw $this->createNotFoundException($error);
     }
     # всего публикаций и событий
     $params['totalPublications'] = intval($s_publications['total']);
     $params['totalEvents'] = intval($s_events['total']);
     # заполняем публикации/события из базы данных по полученным ID из запроса Sphinx
     $publications = array();
     $total = $type == 'event' ? $params['totalEvents'] : $params['totalPublications'];
     # если материалы найдены
     if ($total) {
         $em = $this->getDoctrine()->getManager();
         $highlight = array('publications' => array(), 'events' => array());
         if ($type == 'event') {
             foreach ($s_events['matches'] as $o) {
                 if ($publication = $em->getRepository('EvrikaMainBundle:Event')->findEnabledById($o['id'] - 1000000)) {
                     $publications[] = $publication;
                 }
             }
         } else {
             foreach ($s_publications['matches'] as $o) {
                 if ($publication = $em->getRepository('EvrikaMainBundle:Publication')->findEnabledById($o['id'])) {
                     $publications[] = $publication;
                 }
             }
         }
//.........这里部分代码省略.........
开发者ID:Quiss,项目名称:Evrika,代码行数:101,代码来源:AbbreviationController.php

示例15: sphinx_search

function sphinx_search($query, $offset = 0, $limit = 30)
{
    require_once 'lib/sphinxapi.php';
    $sphinxClient = new SphinxClient();
    $sphinxClient->SetServer('localhost', 9312);
    $sphinxClient->SetConnectTimeout(1);
    $sphinxClient->SetFieldWeights(array('title' => 70, 'content' => 30, 'feed_title' => 20));
    $sphinxClient->SetMatchMode(SPH_MATCH_EXTENDED2);
    $sphinxClient->SetRankingMode(SPH_RANK_PROXIMITY_BM25);
    $sphinxClient->SetLimits($offset, $limit, 1000);
    $sphinxClient->SetArrayResult(false);
    $sphinxClient->SetFilter('owner_uid', array($_SESSION['uid']));
    $result = $sphinxClient->Query($query, SPHINX_INDEX);
    $ids = array();
    if (is_array($result['matches'])) {
        foreach (array_keys($result['matches']) as $int_id) {
            $ref_id = $result['matches'][$int_id]['attrs']['ref_id'];
            array_push($ids, $ref_id);
        }
    }
    return $ids;
}
开发者ID:rclsilver,项目名称:openshift-tt-rss,代码行数:22,代码来源:functions.php


注:本文中的SphinxClient::SetFieldWeights方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。