弹性搜索和Firebase:结果限制更改和奇怪的查询结果

时间:2016-12-01 18:38:04

标签: javascript android google-app-engine elasticsearch firebase

我已经设置了一个弹性搜索瞬间,创建了一个Firebase项目并在我的localhost上运行了手电筒。当我在默认路径(搜索/请求)中查询Firebase数据库时,我在Firebase上的数据库实例中的搜索/响应路径中创建了10个结果。

有人可以更有经验解释一下:

  1. 如何在Firebase上将结果限制更改为10个以上的结果? (我尝试使用底部的代码修补SearchQueue.js,但我没有设法让它工作。

  2. 为什么执行查询时的搜索结果而未指定索引和类型会返回弹性服务器上的条目总数,因此Firebase上的结果无关?

  3. 我在firebase上使用postman进行ReST调用(PUT),并将JSON内容发送到/ search / request /

    这个json内容在结果方面起作用:

    { "index": "chatmessages", "type": "chat", "query": "georgebest"} 
    

    但是这个没有:

    {"query": "georgebest"}
    

    两者都返回了Status: 200 OK

    让我添加使用Sense并运行相同的查询结果是完全正确的。使用手电筒时会出现问题。

    请注意,我不使用任何规则,因此我将Firebase数据库保持打开状态以进行测试。 如果需要任何其他信息,请告诉我。谢谢。

    1)的代码段:

    SearchQueue.prototype = {
    _process: function(snap) {
     var dat = snap.val();
     var key = snap.key;
    
     if (this._assertValidSearch(key, dat)) {
      // Perform (a very simple) ElasticSearch query
       var searchProps = {
         index: dat.index,
         type: dat.type,
         //added variables
         size : dat.size,
         from : dat.from
               };
    

2 个答案:

答案 0 :(得分:2)

看起来你遇到了一个错误fixed in the 0.2.0 release

请注意,在最新版本中queryqbody取代,以与ES内联。 (query现在仍然有效)

更有用的示例现已包含在文档here中。

 {
   "from" : 0, 
   "size" : 50, 
   "body": {
     "query": {
        "match": {
           "_all": "foo"
        }
     }
   }
 }

使用q作为sql lite格式也可以:

{
   "from" : 0, 
   "size" : 50, 
   "q": "foo"
}

答案 1 :(得分:0)

我发现在我的情况下导致问题的原因(可能也是由于Kato在上面建议的其他方式引起的)。

第一期: 我在我的系统中运行了以前版本的node.js,我所做的是将node.js更新为版本6.9.1 ,然后将npm升级到版本4.0.2 (使用npm install npm@latest -g)之后我恢复了所有必需的node_modules(npm install --save firebasenpm install --save elasticsearch)并瞧!有效! 我用于 size 来自变量的代码:

SearchQueue.prototype = {
_process: function(snap) {
 var dat = snap.val();
 var key = snap.key;

 if (this._assertValidSearch(key, dat)) {
  // Perform (a very simple) ElasticSearch query
   var searchProps = {
     index: dat.index,
     type: dat.type,
     //added variables
     size : dat.size,
     from : dat.from,
           };

json文件的内容:

{ "index":"chatmessages","type" : "chat", "query":"some_query", "from":"0", "size":"20"}

第二期: 结果没有正确传递给弹性服务器,返回" undefined"并存储所有结果的命中数。 我使用邮递员在以下网址firebase_address/search/request/some_object.json中发送JSON 但只是为了参考,如果你想在firebase中手动完成,你应该创建这样的东西: firebase json structure

当然,从这里开始的方法是使用上面建议的latest version