2016-01-03 60 views
1

定義的類型在這個例子中:搜索與Apache Cassandra的

CREATE TYPE address (
    street text, 
    city text, 
    zip_code int, 
    phones set<text> 
) 

CREATE TABLE users (
    id uuid PRIMARY KEY, 
    name text, 
    addresses map<string, address> 
) 

我如何可以查詢用戶city = newyork或找到一個特定的電話號碼的用戶。

+0

我同意接受的答案,您應該考慮以一種更適合Cassandra的方式重新設計您的數據模型。但是,更廣泛地說,將Cassandra與Apache Solr集成允許查詢非主鍵字段,包括用戶定義的類型:http://docs.datastax.com/en/latest-dse/datastax_enterprise/srch/srchUDT.html(鏈接爲在Solr中爲DataStax企業Cassanra軟件包配置UDT的指南,該軟件包不是免費的)。 – JohnC

回答

3

這不是真正詢問用戶定義類型的一個問題:想象address將是一個單個text列和addresses將含有單一地址;(即addresses TEXT)。問題會是一樣的。

您的用戶表並不意味着可以通過除主鍵之外的其他任何東西進行查詢,在這種情況下,主鍵是分區鍵,這是一個UUID,這使得它幾乎沒有用處。

如果你要查詢的名字的用戶我會反規範化(即意味着某種重複),並作出users_by_name表:

CREATE TABLE users_by_name(
    name TEXT, 
    id UUID, 
    addresses whatever, 
    PRIMARY KEY((name), id) 
) 

當用戶由name存儲(他們應該是唯一的)和結果將按id排序(id是主鍵的集羣關鍵部分)。

也是一樣的查詢通過地址:

CREATE TABLE users_by_name(
    city TEXT, 
    street TEXT, 
    name TEXT, 
    id UUID, 
    PRIMARY KEY((city), street) 
) 

你可能會認爲它並沒有真正解決您的問題,但它看起來像你從一個關係數據庫(SQL)點設計數據模型,這不是Cassandra的目標。

+1

謝謝你有幫助 – reihaneh