0

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

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

我宁愿不必为了解决这个特殊问题而添加 lucene 或其他一些技术。

如果它完全相关。我将 java 与 datastax 驱动程序一起使用。

4

1 回答 1

1

@雅各布

不久前我已经实现了名称搜索。首先,我使用 Lucene 标准分析器将名称拆分为令牌。然后 foreach 标记我索引它。

Tokennizer 代码在这里,非常简单

对于 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,您只能通过完全匹配的字符串语义开始进行搜索。使用简单设计的包含语义进行搜索是不可能的。

于 2013-09-08T06:32:44.103 回答