我有下表:
CREATE TABLE videos_tags (
id text,
tag text,
video text,
someotherfield long,
PRIMARY KEY (id),
) WITH gc_grace_seconds = 1296000
AND compaction={'class': 'LeveledCompactionStrategy'}
AND compression={'sstable_compression': 'LZ4Compressor'};
该表存储标签和视频列表。视频可以包含一个或多个标签;并且标记可以归因于多个视频。例如:
id | tag | video
------------------------------------------
1 | dancing | video1
2 | singing | video2
3 | prank | video3
4 | prank | video4
5 | funny | video3
6 | cover | video2
我想向用户展示基于广告代码分配的相关视频列表 - 某个视频与用户视频共享的标签越多,相关的视频就越多"它是。我使用的实际方法包括两个步骤:
获取用户视频标签的列表
Q = :&安培; FQ =视频:视频1&安培; FL =标签
识别视频使用与用户视频相同的标签,然后选择前10名(结果集切片在应用程序端完成)
q = :& fq = tag:tag1 AND tag:tag2 AND tag:tag3 AND!video:video1& fl = video& stats = true& stats.field = someotherfield& stats。面=视频
注意:我使用的是stats而不是plain facet,因为我还需要 someotherfield的总和
此方法产生的平均执行时间为30秒。不幸的是,我的应用程序的最长可接受查询时间是10秒
是否有更好的方法来解决此数据要求?我打开:
注意: