我正在使用Riak作为用Python实现的图形数据库的键值存储后端。
我创建了一个名为nodes
的自定义search schema。
我创建并激活了一个存储区类型nodes
,其中search_index
属性设置为nodes
,datatype
属性设置为map
。
我将以下数据插入到存储桶default
中(存储桶类型为nodes
):
key: node1
value: {
"type_set": {"n1"},
"foo_set": {"bar", "baz"}
}
NB:数据会自动转换为Map数据类型。
我可以正确获取数据,但我尝试了以下全文搜索,并且没有返回任何文档:
type_set:n1
type_set:*n1*
type_set:*
foo_set:*
_yz_rk:node1
_yz_rk:*
我的文档似乎没有编入索引。
我还尝试将search_type
属性设置为nodes
上的default
,但我得到的结果相同。
参数search
在配置文件(on
)中设置为/etc/riak/riak.conf
,并且已安装OpenJDK 7.
我不知道我做错了什么,如果有人能帮助我,请提前谢谢。
答案 0 :(得分:1)
首先,您应该考虑到Riak会自动添加后缀_set
,因此您不必为type_set
type
命名。type_set_set:*
。否则,您必须查询type_set:*
而不是<dynamicField name="*_set" type="string" indexed="true" stored="true" multiValued="true"/>
。
其次,根据Data Type Schemas,嵌入式模式(与顶级模式相对)必须使用动态字段。显然,Riak使用顶级地图的一些内部标识符来预设字段名称。不幸的是,这也意味着你不能索引一个集合而不索引另一个集合。
我已经进行了一些测试,发现<dynamicField name="*type_set" type="string" indexed="true" stored="true" multiValued="true"/>
工作正常,而0000 0000 1111 1111 1111 1111 1111 1111
没有。