Riak:可搜索的地图列表(带有CRDT)

时间:2019-06-20 20:17:36

标签: riak riak-search

我有一个用例,其中包括在一个属性下存储多个地图。这是等效的JSON列表:

[
{"tel": "+33123456789", "type": "work"},
{"tel": "+33600000000", "type": "mobile"},
{"tel": "+79001234567", "type": "mobile"}
]

此外,我想在对象级别进行搜索。例如: -具有手机号码的搜索条目 -搜索条目中包含手机号码且号码以字符串“ +7”开头的

由于Riak不支持映射集(仅支持寄存器集),所以我想知道是否有实现它的技巧。到目前为止,我有两个想法

地图

想法是为对象生成(随机吗?)键,并将列表中的每个对象存储在父映射中,该父映射的键是仅出于拥有键而生成的键。

在我看来,它不允许搜索对象(父地图中的地图),因为Riak Solr搜索需要该属性的完整路径。一个人不能简单地编写以下Solr查询:phone_numbers.*.tel:+7*。似乎也很难进行组合搜索(例如,具有手机号码且其号码以字符串“ +7”开头的搜索条目)。

具有模拟多值属性的集合

此解决方案包括使用set并将对象的所有值作为单个字符串插入,并在它们之间使用分隔符。是的,这是黑客。属性值看起来像:$tel:+79001234567$type:mobile$,其中:是属性名称-值分隔符,$是属性分隔符。

使用*通配符(很丑陋,但仍然可行)进行搜索是可行的,除了转义分隔符的问题:如果type属性包含:怎么办?它们是Riak接受的一些分隔符,它们在字符串中是不可接受的(我在考虑控制字符)?

简而言之

我正在寻找一种解决方案,无论它有多糟糕,只要它可行即可。任何想法都欢迎。

0 个答案:

没有答案