我有一些非常大的表(约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表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值?
谢谢!
答案 0 :(得分: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