2013-10-24 34 views
0

的sphinx.conf獅身人面像 - 實現使用setfilter OR爲sql_attr_uint

sql_query   = SELECT item_id, item_title, item_time, cat_id, region_id, region_parent, region1, region2, region3, metro_id, group_id, doc_words, FROM articles; 

sql_attr_uint   = cat_id 
sql_attr_uint   = region_id 
sql_attr_uint   = region_parent 
sql_attr_uint   = region1 
sql_attr_uint   = region2 
sql_attr_uint   = region3 
sql_attr_uint   = metro_id 
sql_attr_uint   = group_id 
sql_attr_timestamp  = item_time 

sql_query_info   = SELECT * FROM articles WHERE item_id=$id 

PHP獅身人面像客戶端

$cl->SetMatchMode(SPH_SORT_EXTENDED ); 

// User choses either full text search for title or doc_words column 
if ($user_column_selected == "titles") 
{ 
    $user_selected_table = "@item_title"; 
} 
elseif ($user_column_selected == "@doc_words") 
{ 
    $user_selected_table = "@doc_words"; 
} 

// User chose to filter by metro_id 
$metro_array = explode(",", $selected_market_type); 
$cl->SetFilter('metro_id', $metro_array); 

// User chose to filter by category 
$cat_array = explode(",", $selected_category); 
$cl->SetFilter('cat_id', $cat_array); 

// User chose to filter by a range of region_id 
if ($user_region_range == "1") 
{ 
    $cl->SetFilterRange('region_id', 100, 152, TRUE); 
} 
else 
{ 
    /**** USER SELECTED A SPECIFIC REGION ****/ 
    $region_array = explode(",", $selected_region); 
    $cl->SetFilter('region_id', $region_array); 
} 

// User chose to sort by time rather than relevance 
if ($user_relevance == "1") 
{ 
    // by item time 
    $cl->SetSortMode(SPH_SORT_ATTR_DESC, 'item_time'); 
} 

// User chose to filter by time range 
if ($user_date_filter == "1") 
{ 
    $cl->SetFilterRange('item_time',$unix_date_from, $unix_date_to,$exclude=false); 
} 

// User choses to group results by group_id 
if ($user_group == "1") 
{ 
    $cl->SetGroupBy ('group_id', SPH_GROUPBY_ATTR, '@group desc'); 
} 

$sphinx_result = $cl->Query($user_selected_table." ".$user_text_query, my_sphinx_index); 

與我的用戶在上面創建具有對ITEM_TITLE或doc_words進行全文搜索的能力,可以通過一個或多個可以按item_time排序並按group_id分組的sql_attr_uint列縮小結果。

我現在可以通過我上面演示的任何一個sql_attr_uint區域列來設置篩選器,但是我需要的是布爾OR或者那些區域列。

我想這樣做,而不會失去上述任何功能,同時爲列region_id,region_parent,region1,region2,region3添加某種「setFilter OR」。

我已經閱讀了文檔中帶有mysql CONCAT示例的setSelect和setFilter,但在將其應用於此類配置時對我沒有任何意義。什麼是處理它的最好方法?

回答

0

個人可能會使得區域

sql_query = ... cat_id, CONCAT_WS(',', region_id, region_parent, region1, region2, region3) AS regions, ... 
sql_attr_multi = uint regions from field 

的新MVA那麼它很容易找到一個particuar身份證件在任何列的:-)