sphinx多屬性查找過濾配置

情景:
有一個商品表goods,一個商品對應多個種類標籤。以下結構:php

goods_id  type_ids

 1         1,2,3
 2         2,3,4
 3         3,4,5

當我要查找種類為4的商品id的時候,就要用到sphinx的多屬性配置了。mysql

主要配置以下:sql

source src1
{
        type                    = mysql
        sql_host                = 127.0.0.1
        sql_user                = search
        sql_pass                =
        sql_db                  = test
        sql_query               = select goods_id,type_ids from goods       

        sql_attr_multi = uint type_ids from field;#配置type_ids為多屬性

        sql_ranged_throttle     = 0
}

然後我們在php中能夠這樣搜索過濾了:
$sphinx->setFilter('type_id', array(2,3,4));
是表示含有標籤值2,3,4中的任意一個即符合篩選,這裏是or關係。ui

$sphinx->setFilter('type_id', array(2));
$sphinx->setFilter('type_id', array(3));
$sphinx->setFilter('type_id', array(4));
設置三個filter是標示,要同時知足2,3,4三個屬性值才符合,這裏是and關係。code

Sphinx sql_attr_multi配置參考

在Sphinx中,有一個MVA屬性,聲明格式以下(用反斜線只是爲了清晰,您仍能夠在一行以內完成聲明):
sql_attr_multi = ATTR-TYPE ATTR-NAME ‘from’ SOURCE-TYPE \
[;QUERY] \
[;RANGE-QUERY]
其中
ATTR-TYPE 是 ‘uint’ 或 ‘timestamp’之一
SOURCE-TYPE 是 ‘field’, ‘query’, 或 ‘ranged-query’之一
QUERY 是用來取得所有(文檔 ID,屬性值)序對的 SQL 查詢
RANGE-QUERY 是用來取得文檔 ID 的最小值與最大值的 SQL 查詢,
與’sql_query_range’相似
示例:
sql_attr_multi = uint tag from field;
sql_attr_multi = uint tag from query; SELECT id, tag FROM tags
sql_attr_multi = uint tag from ranged-query; \
SELECT id, tag FROM tags WHERE id>=$start AND id<=$end; \
SELECT MIN(id), MAX(id) FROM tags
使用field類型時,field字段的值應該是以英文逗號隔開的多個無符號32位整數,如:1,2,3,4
使用query或者ranged-query時,每行一個值,一個id對應多個(多行)tag值
相關文章
相關標籤/搜索