2011-11-09 4 views
1

Я хочу сортировать столбцы данных с помощью Sphinx. Например, я хочу сортировать данные по столбцам; предположим, что данные, найденные в поле product_name, затем должны прийти сначала, а затем данные из следующего поля product_description.Как отсортировать столбец данных с помощью Sphinx?

Как я могу это сделать?

ответ

0
$cl->setRankingMode(SPH_RANK_WORDCOUNT); 
$cl->query("($q) | @product_name ($q)",$index); 

- один способ.

но попробовать

$cl-setFieldWeights(array('product_name'=>10)); 

первый :)

0
 #indexer.sh shell script 
     #!/bin/bash 
     indexer --config /etc/sphinxsearch/sphinx.conf --all --rotate 
     #sphinx.conf 
     #!/usr/bin/php 
     #main root configuration of sphinx file 
     # 
     source root 
     { 
      type    = mysql 
      sql_host   = localhost 
      sql_user   = db_user 
      sql_pass   = db_pass 
      sql_port   = 3306 # optional, default is 3306 
      sql_query_pre  = SET CHARACTER_SET_RESULTS=utf8 
      sql_query_pre  = SET NAMES utf8 
      sql_query_pre  = SET CHARACTER SET utf8 
     } 
     #read files from configuration folder to different indexes and sources 
     <?php 
     //scanfolder and list files to var 
     $files = scandir("/etc/sphinxsearch/index_conf/"); 
     foreach($files as $key => $value) 
     { 
      if($value != "." && $value != "..") 
      { 
        include("index_conf/$value"); 
      } 
     } 
     ?> 

     #set indexer memory 
     indexer 
     { 
      mem_limit  = 512M 
     } 
     #set search deamon settings 
     searchd 
     { 
      listen   = 9312 
      #listen   = 9306:mysql41 
      log    = /var/log/sphinxsearch/searchd.log 
      query_log  = /var/log/sphinxsearch/query.log 
      read_timeout = 5 
      max_children = 30 
      pid_file  = /var/run/searchd.pid 
      max_matches  = 1000000 
      seamless_rotate = 1 
      preopen_indexes = 0 
      unlink_old  = 1 
      workers   = threads # for RT to work 
      binlog_path  = /var/lib/sphinxsearch/data 
     } 

     //================= indexer file ================== 
     source src_name : root 
     { 
       #set database selection and query 
       sql_db     = database 
       sql_query    = \ 
        SELECT id\ 
        'c_a' AS index_id\ 
        FROM table AS t1\ 
        LEFT JOIN crimte_table AS t2 ON t1.type = t2.id \ 
        WHERE \ 
        t1.id <=(SELECT max_doc_id FROM sph_counter WHERE counter_id=1) \ 
        GROUP BY t1.id 
        sql_field_string  = index_id 
        sql_attr_uint   = id 
        sql_query_pre   = SET CHARACTER_SET_RESULTS=utf8 
        sql_query_pre   = SET NAMES utf8 
        sql_query_pre   = SET CHARACTER SET utf8 
        sql_query_pre   = REPLACE INTO sph_counter SELECT 1,MAX(id),MAX(updated) FROM table 
     } 
     #indexing case source 
     index src_name 
     { 
       source   = src_name 
       path   = /var/lib/sphinxsearch/data/src_name 
       docinfo   = extern 
       charset_type = utf-8 
       charset_table = 0..9,U+41..U+5a->U+61..U+7a, U+61..U+7a, U+aa, U+b5, U+ba, \ 
       U+c0..U+d6->U+e0..U+f6, U+d8..U+de->U+f8..U+fe, U+df..U+f6, U+f8..U+ff, U+100..U+12f/2, \ 
       U+130->U+69, U+131, U+132..U+137/2, U+138, U+139..U+148/2, U+149, U+14a..U+177/2, \ 
       U+178->U+ff, U+179..U+17e/2, U+17f..U+180, U+181->U+253, U+182..U+185/2, U+186->U+254, \ 
       U+187..U+188/2, U+189..U+18a->U+256..U+257, U+18b..U+18c/2, U+18d, U+18e->U+1dd, \ 
       U+18f->U+259, U+190->U+25b, U+191..U+192/2, U+193->U+260, U+194->U+263, U+195, \ 
       U+196->U+269, U+197->U+268, U+198..U+199/2, U+19a..U+19b, U+19c->U+26f, U+19d->U+272, \ 
       U+19e, U+19f->U+275, U+1a0..U+1a5/2, U+1a6->U+280, U+1a7..U+1a8/2, U+1a9->U+283, \ 
       U+1aa..U+1ab, U+1ac..U+1ad/2, U+1ae->U+288, U+1af..U+1b0/2, U+1b1..U+1b2->U+28a..U+28b, \ 
       U+1b3..U+1b6/2, U+1b7->U+292, U+1b8..U+1b9/2, U+1ba..U+1bb, U+1bc..U+1bd/2, U+1be..U+1c3, \ 
       U+1c4->U+1c6, U+1c5..U+1c6/2, U+1c7->U+1c9, U+1c8..U+1c9/2, U+1ca->U+1cc, U+1cb..U+1dc/2, \ 
       U+1dd, U+1de..U+1ef/2, U+1f0, U+1f1->U+1f3, U+1f2..U+1f5/2, U+1f6->U+195, U+1f7->U+1bf, \ 
       U+1f8..U+21f/2, U+220->U+19e, U+221, U+222..U+233/2, U+234..U+23a, U+23b..U+23c/2, \ 
       U+23d->U+19a, U+23e..U+240, U+241->U+294, U+250..U+2c1, U+2c6..U+2d1, U+2e0..U+2e4, \ 
       U+2ee, U+37a, U+386..U+389->U+3ac..U+3af, U+38c..U+38e->U+3cc..U+3ce, U+390, \ 
       U+391..U+3a1->U+3b1..U+3c1, U+3a3..U+3ab->U+3c3..U+3cb, U+3ac..U+3ce, U+3d0..U+3d7, \ 
       U+3d8..U+3ef/2, U+3f0..U+3f3, U+3f4->U+3b8, U+3f5, U+3f7..U+3f8/2, U+3f9->U+3f2, \ 
       U+3fa..U+3fb/2, U+3fc..U+3ff, U+400..U+40f->U+450..U+45f, U+410..U+42f->U+430..U+44f, \ 
       U+430..U+45f, U+460..U+481/2, U+48a..U+4bf/2, U+4c0, U+4c1..U+4ce/2, U+4d0..U+4f9/2, \ 
       U+500..U+50f/2, U+531..U+556->U+561..U+586, U+559, U+561..U+587, U+5d0..U+5ea, \ 
       U+5f0..U+5f2, U+621..U+63a, U+640..U+64a, U+66e..U+66f, U+671..U+6d3, U+6d5, \ 
       U+6e5..U+6e6, U+6ee..U+6ef, U+6fa..U+6fc, U+6ff, U+e01..U+e30, U+e32..U+e33, \ 
       U+e40..U+e46, U+e81..U+e82, U+e84, U+e87..U+e88, U+e8a, U+e8d, U+e94..U+e97, \ 
       U+e99..U+e9f, U+ea1..U+ea3, U+ea5, U+ea7, U+eaa..U+eab, U+ead..U+eb0, U+eb2..U+eb3, \ 
       U+ebd, U+ec0..U+ec4, U+ec6, U+edc..U+edd, U+1000..U+1021, U+1023..U+1027, U+1029..U+102a, \ 
       U+1050..U+1055, U+10a0..U+10c5->U+2d00..U+2d25, U+10d0..U+10fa, U+10fc, U+2d00..U+2d25, \ 
       U+1d00..U+1dbf, U+1e00..U+1e95/2, U+1e96..U+1e9b, U+1ea0..U+1ef9/2, U+3005..U+3006, \ 
       U+3031..U+3035, U+303b..U+303c, U+3041..U+3096, U+309d..U+309f, U+30a1..U+30fa, \ 
       U+30fc..U+30ff, U+31f0..U+31ff 
     } 

     #delta data source and index 
     source src_name_delta : root 
     { 
       #set database selection and query 
       sql_db     = database 
       sql_query    = \ 
        SELECT id, \ 
        'c_a' AS index_id\ 
        FROM table AS t1\ 
        LEFT JOIN crimte_table AS t2 ON t1.type = t2.id \ 
        WHERE \ 
        (\ 
         (t1.id > (SELECT max_doc_id FROM sph_counter WHERE counter_id =10)) \ 
         OR (t1.updated > (SELECT updated FROM sph_counter WHERE counter_id=1)) \ 
        ) \ 
        GROUP BY t1.id 
       sql_attr_uint   = id 
       sql_field_string  = id 
       sql_query_pre   = SET CHARACTER_SET_RESULTS=utf8 
       sql_query_pre   = SET NAMES utf8 
       sql_query_pre   = SET CHARACTER SET utf8 
       #set killlist not exclude from main index 
       sql_query_killlist = SELECT id FROM table WHERE \ 
          updated > (SELECT updated FROM sph_counter WHERE counter_id=1) 
     } 

     #indexing case source 
     index src_name_delta 
     { 
       source   = src_name_delta 
       path   = /var/lib/sphinxsearch/data/src_name_delta 
       docinfo   = extern 
       charset_type = utf-8 
       charset_table =..charset table as above 
     } 
     #indexer.sh 
     cat /etc/sphinxsearch/main_indexes.list | xargs indexer --config /etc/sphinxsearch/sphinx.conf --rotate 
     #main index (main_indexes.list) 
     src_name 
     #delta indexer 
     cat /etc/sphinxsearch/delta_indexes.list | xargs indexer --config /etc/sphinxsearch/sphinx.conf --rotate 
     #counter table (sph_counter) 
     counter_id (int), max_doc_id (int), updated (timestamp) 
     #api search 
     //set server 
     $this->sphinxclient->SetServer('localhost', '9312'); 
     if($this->input->post("match_type") == 2) 
     { 
      $this->sphinxclient->SetMatchMode(SPH_MATCH_EXTENDED2); 
     } 
     else 
     { 
      $this->sphinxclient->SetMatchMode(SPH_MATCH_ANY); 
     } 
     $this->sphinxclient->SetRankingMode(SPH_RANK_PROXIMITY_BM25); 
     //$this->sphinxclient->SetRankingMode(SPH_RANK_WORDCOUNT); 
     $this->sphinxclient->setLimits($starting,$recpage,100000); 
     $keyword = $this->input->post("keyword"); 

     $keyword = trim(html_entity_decode($keyword, ENT_QUOTES, 'UTF-8')) ; 
     $data['keyword'] = $keyword; 

     $valu = ""; 
     $this->sphinxclient->resetGroupBy(); 
     //$this->sphinxclient->SetSortMode(SPH_SORT_EXTENDED, "index_id ASC"); 
     $this->sphinxclient->SetGroupBy("id",SPH_GROUPBY_ATTR); 
     $result = $this->sphinxclient->Query($keyword, $indexList); 
     if($result) 
     { 
      print_r($result); 
     } 
Смежные вопросы