我想知道穷人在你的人/帐户记录集中实施搜索的解决方案是什么,部分匹配名称?很高兴调整表格,或在需要时创建其他表格。
CREATE TABLE person (
uuid timeuuid PRIMARY KEY,
created bigint,
email text,
first_name text,
last_name text,
password text
)
我宁愿不必添加lucene或其他技术来解决这个特殊问题。
如果它完全相关。我使用java和datastax驱动程序。
答案 0 :(得分:1)
@jacob
我刚刚实现了名称搜索。首先,我使用Lucene标准分析器将名称拆分为令牌。然后foreach令牌我索引它。
Tokennizer代码 here ,非常简单
对于Cassandra的设计
CREATE TABLE search_index
(
search_type text, // type of search, can be 'FIRSTNAME', 'LASTNAME' or 'EMAIL'
value text, // indexed valued of firstname, lastname or email
user_id bigint, // id of user having the searched firstname, lastname or email
PRIMARY_KEY(search_type,value)
);
搜索以'Jo'开头的名字:
SELECT * FROM search_index WHERE search_type='FIRSTNAME' AND value>='Jo' AND value<'Jo'+'b\uFFFF'
'b \ uFFFF'表示UTF-8中的最后一个字符。通过这样的查询,您将能够找到以'Jo'开头的所有名字。它可以是'John','Johnny','Josh', ...直到'Jo'+'b \ uFFFF'强>
对于姓氏或电子邮件的搜索,这是完全相同的技术。
请注意,使用 Cassandra ,您只能通过完全字符串匹配或以语义开头搜索。使用简单设计无法使用包含语义进行搜索。