Indexing 在Sphinx搜索中使用sql\u attr\u multi

Indexing 在Sphinx搜索中使用sql\u attr\u multi,indexing,full-text-search,search-engine,sphinx,Indexing,Full Text Search,Search Engine,Sphinx,我有一些非常大的表(约3000万行),它们具有以下类似的结构: -项目标识-uint -项目_文本-varchar(255) -用户id-uint 没有键,您可以找到具有相同项\ id和项\文本但不同用户\ id的记录: item_id, item_text, user_id 3, text1, 5 3, text1, 7 4, text2, 5 我正在尝试从MySQL迁移到Sphinx来进行文本搜索,那么如何翻译类似以下内容: 从表中选择*,其中用户id=123,项目文本为“%se

我有一些非常大的表(约3000万行),它们具有以下类似的结构:
-项目标识-uint
-项目_文本-varchar(255)
-用户id-uint

没有键,您可以找到具有相同项\ id和项\文本但不同用户\ id的记录:

item_id, item_text, user_id   
3, text1, 5  
3, text1, 7
4, text2, 5
我正在尝试从MySQL迁移到Sphinx来进行文本搜索,那么如何翻译类似以下内容:
从表中选择*,其中用户id=123,项目文本为“%search\u 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\u attr\u multi来存储为每个项目\u id找到的用户\u id值

谢谢

你可以这样做

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,你可以这样做

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

已经试过了这个组,它成功了:)我将进一步研究min_ifix len,因为它似乎占用了很多磁盘空间。非常感谢。已经尝试过GROUP_CONCAT,它成功了:)我将进一步研究min_ifix_len,因为它似乎占用了大量磁盘空间。非常感谢。