在cassandra中按姓名查找人物

时间:2013-09-08 03:18:52

标签: java cassandra

我想知道穷人在你的人/帐户记录集中实施搜索的解决方案是什么,部分匹配名称?很高兴调整表格,或在需要时创建其他表格。

CREATE TABLE person (
  uuid timeuuid PRIMARY KEY,
  created bigint,
  email text,
  first_name text,
  last_name text,
  password text
)

我宁愿不必添加lucene或其他技术来解决这个特殊问题。

如果它完全相关。我使用java和datastax驱动程序。

1 个答案:

答案 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 ,您只能通过完全字符串匹配语义开头搜索。使用简单设计无法使用包含语义进行搜索。