2012-10-20 279 views
1

我建立搜索系统,以nosql数据库cassandra,它不支持任何形式的关键字搜索的,所以有几个选项,经过一番搜索,这是什么跟了上来。PHP关键字搜索

我可以存储可能被搜索的关键字的列表,例如,让我们说这是一个音乐流派。所以我会存储所有这些类型的,然后检索所有的人都去,并用PHP它们进行过滤,将它与假设2k关键字以上很慢?

我想获得在某处~100ms过滤后的结果是,可能吗?如果是的话,哪种php函数可以帮助我进行字词过滤?

回答

0

如果你正在寻找的音乐流派过滤歌曲或专辑,这居然真的容易做到卡桑德拉。我会用'tag'这个词来代替流派,因为你可以用任何标签来做到这一点,而不仅仅是流派。

布置一个列族,其中的键是标签,并且行对于每个具有该标签的项目都有一个单元格。您可以使用项目名称或ID作为单元格名称,并且单元格值可以为空或包含您想要的任何其他元数据。

使用phpcassa(这是在原有基础上节俭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,会非常快,只有几个毫秒。

+0

你不明白我需要什么。是的,你的回答是正确的,如果我会搜索一个“完整”的单词,但我需要搜索,而用户类型的标签,所以说用户键入'拍'而不是'甲壳虫'我需要找到最接近的标签,在这情况最有可能是'甲壳虫'和其他几乎所有与用户输入密切相关的人 – Linas

+0

好吧,不用介意我用柱式切片以更有趣的方式做到了这一点,迄今为止它似乎工作得非常好 – Linas