【问题标题】:Riak simple query doesn't return data - Riak Java ClientRiak 简单查询不返回数据 - Riak Java 客户端
【发布时间】:2014-07-23 16:35:04
【问题描述】:

下面的 sn-p 相当简单,通过查看其他示例应该可以工作

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”,那么为什么第一个 sn-p 没有返回任何值,我打开了 'riak_search',虽然我使用的是 riak基于 scala 的应用程序的 java 客户端应该不会造成任何问题。

有没有人知道为什么 sn-p 不能正常工作。我的 riak 版本是 1.3.2 和 Riak Java Client :- 1.1.4

【问题讨论】:

  • 在添加数据之前是否开启了搜索? Riak 搜索不会索引在启用之前添加的数据。问题可能出在搜索上,而不是 mapreduce。试试curl http://localhost:8098/solr/preit-users/select?q=firstName:Scala
  • <?xml version="1.0" encoding="UTF-8"?> <response> <lst name="responseHeader"> <int name="status">0</int> <int name="QTime">0</int> <lst name="params"> <str name="indent">on</str> <str name="start">0</str> <str name="q">firstName:Scala</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">0</str> </lst> </lst> <result name="response" numFound="0" start="0" maxScore="0.0"> </result> - 结果
  • 问题出在:(numFound="0"),搜索查询未找到任何结果,因此 mapreduce 作业没有输入。
  • 那么我做错了什么,我对 riak 完全陌生,所以.....任何适合我的解决方案......我没有完成的代码的任何重要部分

标签: scala riak


【解决方案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/

【讨论】:

  • 感谢@Joe 的回答,这对于像我这样的新用户来说很容易理解,似乎我遗漏的部分是 -> search-cmd install testbucket,我希望现在我的 riak java客户端也将正常工作,再次感谢您。
猜你喜欢
  • 1970-01-01
  • 2011-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-02
相关资源
最近更新 更多