2013-02-08 30 views
0

我有一些非常大的表(〜30M行)具有以下相似的結構:
- ITEM_ID - UINT
- ITEM_TEXT - VARCHAR(255)
- USER_ID - UINT在獅身人面像使用sql_attr_multi搜索

沒有鑰匙,你可以找到相同的ITEM_ID和記錄ITEM_TEXT但不同的user_id:

item_id, item_text, user_id 
3, text1, 5 
3, text1, 7 
4, text2, 5 

我試圖從MySQL遷移到獅身人面像做文本搜索,所以我怎麼能像翻譯的東西:
SELECT * FROM表WHERE user_id = 123 AND item_text LIKE'%search_string%'。 ?!

隨着當前獅身人面像的配置設置索引正在運行的磁盤空間不足:

source items 
{ 
    ... 
    sql_query_pre = SELECT @id := 0 
    sql_query  = SELECT @id := @id + 1, item_id, item_text, user_id FROM items 
    sql_attr_uint = user_id 
    sql_attr_uint = item_id 
} 

index items_index 
{ 
    source   = items 
    path   = ... 
    enable_star = 1 
    min_prefix_len = 0 
    min_infix_len = 3 
    min_word_len = 3 
} 

有沒有辦法使用sql_attr_multi存儲找到每個ITEM_ID user_ID的值的方法嗎?

謝謝!

回答

3

你可以做,

source items { 
    ... 
    sql_query  = SELECT item_id, item_text, GROUP_CONCAT(user_id) AS user_id \ 
        FROM items GROUP BY item_id ORDER BY NULL 
    sql_attr_multi = uint user_id from field; 
} 

也問自己,如果你真的min_infix_len?這極大地擴大了磁盤大小(遠遠超過重複行)。或者,也許嘗試字典=關鍵字

+0

已經嘗試過GROUP_CONCAT和它的工作:)我會更多一點,因爲它看起來像使用了大量的磁盤空間,看看min_ifix_len。謝謝! – sphinx101 2013-02-09 20:04:01