2015-04-22 50 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

相關問題