1

私はnosqlデータベースcassandraを使用して検索システムを構築していますが、それはいかなる種類のキーワード検索もサポートしていません。

検索できるキーワードのリストを保存できます。たとえば、音楽のジャンルだとしましょう。したがって、これらのジャンルをすべて保存してから、一度にすべてを取得し、php でフィルタリングします。たとえば、2kキーワード以上で非常に遅くなりますか?

フィルタリングされた結果をどこかで取得したいの~100msですが、それは可能ですか? もしそうなら、どのようなphp関数が単語のフィルタリングに役立ちますか?

4

1 に答える 1

0

曲やアルバムを音楽ジャンルでフィルタリングしたい場合、Cassandra を使用すると、実際には非常に簡単に行うことができます。ジャンルだけでなく、あらゆる種類のタグで実際にこれを行うことができるため、ジャンルの代わりに「タグ」という用語を使用します。

キーがタグである列ファミリーをレイアウトし、行にはそのタグを持つ項目ごとに 1 つのセルがあります。セル名には項目名または 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";

1 つのタグの下に 100 万個のアイテムを簡単に保存できます。たとえば、最初の 2000 個を取得するのは非常に高速で、数ミリ秒しかかかりません。

于 2012-10-20T19:15:21.297 に答える