0

我有一些相当大的表(~30M 行),它们具有以下类似的结构:
- item_id - uint
- item_text - varchar(255)
- user_id - uint

没有键,您可以找到具有相同 item_id 和 item_text 但不同 user_id 的记录:

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

我正在尝试从 MySQL 转移到 Sphinx 进行文本搜索,那么我该如何翻译:
SELECT * FROM table WHERE user_id=123 AND item_text LIKE '%search_string%'。?!

使用当前的 sphinx 配置设置,索引器的磁盘空间不足:

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 值?

谢谢 !

4

1 回答 1

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?这极大地增加了磁盘大小(远远超过重复行)。或者尝试 dict=keywords

于 2013-02-08T19:08:29.133 回答