2015-04-22 14 views
0

我试图建立一个查询,首先让我得到一个跟随用户的追随者列表,其次它应该采取该列表,然后检查他们是否在线。Elasticsearch通过RESTful API进行查询设计

我有两个“索引”或端点/通道和/以下。

通道端点JSON对象看起来像这样(缩写份)

{ channel: {"username":"username1", ... , "online":"true" } } 

以下端点对象看起来有点像这样

{ following : {"username1":{"username2":"username2", "username3":"username3"} } 

如果用完一个简单的查询/以下/ _search我找回像...

{ 
    "_index": "following", 
    "_type": "following", 
    "_id": "_Liso_", 
    "_score": 1, 
    "_source": { 
    "Gabe": "Gabe", 
     "Gavin": "Gavin" 
    } 
} 

这个结果意味着加文是关注加贝。

我相信问题是我如何存储数据。
在火力点我的数据是这样的

following 
    |---Gabe 
     |----Gavin:Gavin 

所以以下对象{用户名}的键/值儿童的每个子对象:{用户名}

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

+0

@marcinn实际上有一些东西类似于REST风格的东西,例如https://www.elastic.co/guide/en/elasticsearch/reference/1.4/search.html 它使用curl -GET请求。如果我没有记错的关键词“GET”是REST风格的 REST风格的定义使用的措辞,如GET,POST,PUT等 https://en.wikipedia.org/wiki/Representational_state_transfer 所以实际上它类似于RESTful。 – user1171911

+0

@marcinn此外,它使用其他RESTful语言,例如PUT,在这个例子中你可以更新你的数据。再次,非常类似于RESTful https://www.elastic.co/guide/en/elasticsearch/reference/1.4/_modifying_your_data.html – user1171911

回答

0

我发现了一个更好的解决方案(或者可能不是)。首先,您查询数据库以查找正在关注用户的用户。

从此列表发送另一查询

{ 
"query":{ 

    "filtered":{ 
     "query":{ 
      "match_all":{} 
     }, 
     "filter":{ 
      "bool":{ 
       "must":{ 
        "terms":{ 
         "username":["username1"] 
        } 
       }, 
       "must_not":{ 
        "terms":{ 
         "online":["true"] 
        } 
       } 
      } 
     } 
    } 
} 
} 

这工作但是用户名不能与国会大厦混合。我不知道这是否是我的一部分索引问题,或者术语必须非常具体。我在客户端使用的解决方案是在提交它们之前将搜索条件小写。这是粗糙和黑客,但它现在工作。

问题,我可能会遇到:如果用户拥有数以百万计的追随者从 数据库中提取所有这些数据将使客户端低迷的


    • 可能的解决方案是对以下结果进行分页并对每20个返回的结果运行查询。

我会继续修改答案,因为我开发/学习更好的查询方法。

+0

没有提供您的映射很难说,但我认为您的小写问题是由您造成的将小写字母分析器应用于现场而不是搜索。您可以通过http://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-analyzers.html –

+0

了解更多关于分析仪以及如何设置默认分析仪和搜索分析仪的信息。转换为小写。如果你想做精确的匹配(而不是部分匹配),那么你需要将映射设置为index = not_analyzed。看到映射部分在这里:http://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-core-types.html – samjudson

+0

是的,我看到了,我已经启用它。它阻挠了我一下,但我最终发现了它。我必须说,入门教程有很多不足之处。 – user1171911

相关问题