以下代码段相当简单,通过查看其他示例,它应该有效
val result = client.mapReduce("some-users","firstName:Scala").execute
println(result.getResultRaw)// It just prints "[]"
但是,带有firstName:Scala的记录实际上就在那里。
运行此代码,
val result = client.mapReduce("some-users").execute ,it actually returns the key of the record
当我使用其他客户端应用程序检查数据时,在我的浏览器中使用
http://localhost:8098//riak/some-users/key
我得到了所需的json数据,这当然有" firstName" :" Scala",那么为什么不是第一个返回任何值的片段,我已经转向' riak_search'虽然我使用riak java客户端作为基于scala的应用程序,但它不应该造成任何问题。
有没有人知道为什么代码段不能正常工作。我的riak版本是1.3.2和Riak Java客户端: - 1.1.4
答案 0 :(得分:1)
由于你已经启动并运行了Riak,你只需要进行搜索:
首先确保在群集中的每个节点上的app.config文件中启用了搜索:
{riak_search, [
{enabled, true}
]},
如果您更改了,则需要重新启动Riak才能生效。
然后从命令行,在要编制索引的存储桶上安装搜索挂钩:
# search-cmd install testbucket
:: Installing Riak Search <--> KV hook on bucket 'testbucket'.
此时如果存储桶中已有数据,则 不 将被编入索引。您需要重新放置要编制索引的任何预先存在的数据。
为了快速演示,我创建了3个键,创造性地命名为1,2和3;每个包含一个简单的json对象:
curl localhost:8098/buckets/testbucket/keys/1 -H "content-type: application/json" -XPUT \
-d '{"firstName":"Tom", "color":"red"}'
curl localhost:8098/buckets/testbucket/keys/2 -H "content-type: application/json" -XPUT \
-d '{"firstName":"Dick", "color":"green"}'
curl localhost:8098/buckets/testbucket/keys/3 -H "content-type: application/json" -XPUT \
-d '{"firstName":"Harry", "color":"blue"}'
然后我可以查询搜索以找到密钥:
# curl http://localhost:8098/solr/testbucket/select\?q=firstName:Harry
<?xml version="1.0" encoding="UTF-8"?>
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">1</int>
<lst name="params">
<str name="indent">on</str>
<str name="start">0</str>
<str name="q">firstName:Harry</str>
<str name="q.op">or</str>
<str name="filter"></str>
<str name="df">value</str>
<str name="wt">standard</str>
<str name="version">1.1</str>
<str name="rows">1</str>
</lst>
</lst>
<result name="response" numFound="1" start="0" maxScore="0.353553">
<doc>
<str name="id">3
</str>
<str name="color">blue
</str>
<str name="firstName">Harry
</str>
</doc>
</result>
</response>
# curl http://localhost:8098/solr/testbucket/select\?q=color:red%20or%20firstName:Harry
<?xml version="1.0" encoding="UTF-8"?>
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">2</int>
<lst name="params">
<str name="indent">on</str>
<str name="start">0</str>
<str name="q">color:red or firstName:Harry</str>
<str name="q.op">or</str>
<str name="filter"></str>
<str name="df">value</str>
<str name="wt">standard</str>
<str name="version">1.1</str>
<str name="rows">2</str>
</lst>
</lst>
<result name="response" numFound="2" start="0" maxScore="0.143844">
<doc>
<str name="id">1
</str>
<str name="color">red
</str>
<str name="firstName">Tom
</str>
</doc>
<doc>
<str name="id">3
</str>
<str name="color">blue
</str>
<str name="firstName">Harry
</str>
</doc>
</result>
</response>
我没有Scala安装方法来提供一个示例,但这应该让你朝着正确的方向前进。
如果您还没有看过它们,搜索文档就在这里:
http://docs.basho.com/riak/latest/dev/using/search/