Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于RESTful API的Elasticsearch查询设计_Rest_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch - Fatal编程技术网 elasticsearch,Rest,elasticsearch" /> elasticsearch,Rest,elasticsearch" />

基于RESTful API的Elasticsearch查询设计

基于RESTful API的Elasticsearch查询设计,rest,elasticsearch,Rest,elasticsearch,我正在尝试构建一个查询,首先让我获得一个跟踪用户的追随者列表,然后它应该获取该列表,然后检查他们是否“在线” 我有两个“索引”或端点/通道和/或后续 通道端点JSON对象如下所示(部分缩写) 下面的endpoint对象看起来有点像这样 { following : {"username1":{"username2":"username2", "username3":"username3"} } following |---Gabe |----Gavin:Gavin 如果我运

我正在尝试构建一个查询,首先让我获得一个跟踪用户的追随者列表,然后它应该获取该列表,然后检查他们是否“在线”

我有两个“索引”或端点/通道和/或后续

通道端点JSON对象如下所示(部分缩写)

下面的endpoint对象看起来有点像这样

{ following : {"username1":{"username2":"username2", "username3":"username3"} }
following
  |---Gabe
        |----Gavin:Gavin
如果我运行一个简单的查询/跟踪/_搜索,我会得到像

{
   "_index": "following",
   "_type": "following",
   "_id": "_Liso_",
   "_score": 1,
   "_source": {
   "Gabe": "Gabe",
      "Gavin": "Gavin"
   }
}
这一结果意味着加文正在追随加布

我认为问题在于如何存储数据。
在firebase中,我的数据如下所示

{ following : {"username1":{"username2":"username2", "username3":"username3"} }
following
  |---Gabe
        |----Gavin:Gavin
因此,以下对象的每个子对象都有{username}的键/值子对象:{username}


现在我可以单独运行查询以获得所需的结果。例如,如果我询问ElasticSearch(ES)频道“Gavin”是否“在线”,我会根据它们是否在线返回一个结果。和下面一样。然而,我似乎无法让查询首先查看谁在跟踪Gavin,然后查看他们是否在线并返回那些在线的用户

我找到了一个更好的解决方案(或许不是)。首先,查询数据库中跟踪用户的用户

从该列表可以发送另一个查询

{
"query":{

    "filtered":{
        "query":{
            "match_all":{}
        },
        "filter":{
            "bool":{
                "must":{
                    "terms":{
                        "username":["username1"]
                    }
                },
                "must_not":{
                    "terms":{
                        "online":["true"]
                    }
                }
            }
        }
    }
}
}
但用户名不能与capitols混合使用。我不知道这是否是我的索引问题,或者术语必须非常具体。我在客户端使用的解决方案是在提交搜索词之前将其小写。它很粗糙,但现在还可以用

我可能遇到的问题:

  • 如果一个用户有数以百万计的追随者从 数据库将使客户端变得迟钝。
    • 一种可能的解决方案是对以下结果进行分页,并对每20个返回的结果运行一次查询

  • 随着我开发/学习更好的查询方法,我将继续修改答案

    如果不提供映射,很难判断是否存在小写问题,但我认为是因为您将小写分析器应用于字段,而不是搜索。您可以了解有关分析器的更多信息,以及如何在默认分析器拆分处设置默认索引和搜索分析器,并将其转换为小写。如果您希望进行精确匹配(而不是部分匹配),则需要将映射设置为index=not_analysis。请参见此处的映射部分:是的,我看到了这一点,并且我已经启用了它。这让我有点困惑,但我最终还是明白了。我必须说,入门教程还有很多需要改进的地方。@marcinn实际上有一些东西类似于RESTful的东西,例如它使用curl-GET请求。如果我没有弄错的话,关键字“GET”来自RESTful。RESTful的定义使用了诸如GET、POST、PUT等术语。因此,实际上它与RESTful类似。@marcinn此外,它还使用了其他RESTful术语,例如PUT。在本例中,您可以更新数据。同样,与RESTful非常相似