我正在使用nosql
数据库cassandra
构建搜索系统,并且它不支持任何类型的关键字搜索,因此有一些选项,经过一些搜索,这就是提出的问题
我可以存储可以搜索的关键字列表,例如,假设它是一种音乐类型。所以我会存储所有这些类型,然后立即检索所有这些类型并使用PHP过滤它们,是否会说2k
个关键字或更多?
我想在某处~100ms
获得过滤结果可能吗?如果是这样,php
函数会帮助我进行文字过滤?
答案 0 :(得分:0)
如果您希望按音乐类型过滤歌曲或专辑,那么使用Cassandra实际上很容易。我会使用“'标记”这个术语。而不是流派,因为你可以用任何类型的标签真正做到这一点,而不仅仅是流派。
布置一个列族,其中键是标记,并且每个具有该标记的项目的行都有一个单元格。您可以使用项目名称或ID作为单元格名称,单元格值可以为空或包含您喜欢的任何其他元数据。
使用phpcassa(基于Cassandra的原始Thrift RPC API),如果你想在一个标签下存储一个项目,它就像这样简单:
$cf->insert($tag, array($item->name, $item->metadata));
要获取具有特定标记的所有项目,请执行以下操作:
$cf->get($tag);
虽然一个好的PHP CQL 3驱动程序还没有完成,但使用CQL 3你可以这样做:
CREATE TABLE TAGS (
tag utf8,
itemid uuid,
PRIMARY KEY (tag, itemid)
);
您可以像这样添加标记项目:
INSERT INTO TAGS (tag, itemid) values ("rock", "Led Zeppelin");
您可以通过执行以下操作来获取带有标记的所有项目:
SELECT * FROM TAGS WHERE tag="rock";
你可以轻松地在一个标签下存储一百万个项目,然后获取第一个,比如2000,将非常快,只有几毫秒。