2016-05-02 6 views
0

私はそれがないまっすぐ進むクエリでFirebaseと弾性検索と懐中電灯を使用すると、作業:FirebaseとElasticSearchとFlashlightのクエリ方法

クエリコード

... 
Map<String,String> q = new HashMap<>(); 
q.put("index", "firebase"); 
q.put("type", "tasting"); 
q.put("query", "rose"); 

String key = ref.child("request").push().getKey(); 
ref.child("request").child(key).setValue(q); 
... 

{"index":"firebase","query":"rose","type":"tasting"} 

しかし、私はなりたくないときは、わずか10ヒントに制限され、これは失敗(結果なし)

クエリ

{"index":"firebase","options":{"from":0,"to":50},"query":{"query_string":{"query":"rose"}},"type":"tasting"} 

コード

... 
HashMap<String, String> q = new HashMap<>(); 
q.put("query", "rose"); 
qs = new HashMap<>(); 
qs.put("query_string", q); 


Map<String, Object> options = new HashMap<>(); 
options.put("from", 0); 
options.put("to", 50); 

HashMap<String, Object> qo = new HashMap<>();  
qo.put("index", "firebase"); 
qo.put("type", "tasting"); 
qo.put("options", options); 
qo.put("query", a); 

String key = ref.child("request").push().getKey(); 
ref.child("request").child(key).setValue(q); 
... 

私は懐中電灯の例で配信オプションを使用すると、オプションの一部を追加します。

"search": { 
    "request": { 
     "$recid": { 
      // I can only read records assigned to me 
      ".read": "auth.id === data.child('id').val() || auth.uid === data.child('id').val()", 
      // I can only write new records that don't exist yet 
      ".write": "!data.exists() && (newData.child('id').val() === auth.id || newData.child('id').val() === auth.uid)", 
      ".validate": "newData.hasChildren(['query', 'index', 'type'])", 
      "index": { 
       // accepts arrays or strings 
       ".validate": "(newData.isString() && newData.val().length < 1000) || newData.hasChildren()", 
       "$child": { 
       ".validate": "newData.isString() && newData.val().length < 1000" 
       } 
      }, 
      "type": { 
       // accepts arrays or strings 
       ".validate": "(newData.isString() && newData.val().length < 1000) || newData.hasChildren()", 
       "$child": { 
       ".validate": "newData.isString() && newData.val().length < 1000" 
       } 
      }, 
      "query": { 
       // structure of the query object is pretty open-ended 
       ".validate": "newData.isString() || newData.hasChildren()" 
      }, 
      "$other": { 
       ".validate": false 
      } 
     } 
    }, 
    "response": { 
     "$recid": { 
      // I can only read/write records assigned to me 
      ".read": "auth.id === data.child('id').val() || auth.uid === data.child('id').val()", 
      ".write": "auth.id === data.child('id').val() || auth.uid === data.child('id').val()", 
      // Assumes that Flashlight will be writing the records using a secret or a token that has admin: true 
      // The only thing a logged in user needs to do is delete results after reading them 
      ".validate": false 
     } 
    } 
    } 

なぜオプションパラメータができます見つけるにはhttps://github.com/firebase/flashlight/issues/29#issuecomment-129340229

+0

を;'は 'qo.putを使用します( "from"、0); qo.put( "to"、50); 'それは機能しますか? –

+0

@AndreiStefanはちょうど試用しました(準拠したセキュリティルールで)。リクエストのログは、 ":0"、 "index": "firebase"、 "query":{"query_string":{"query": "*"}}、 "to" "タイプ": "試飲"} 'しかし、それでもヒットしない返信 – Anthony

+0

私は解決策を証明していないことを知っていますが、私はFlashLightの使い方を学ぶことができます。 FireLightをFirebaseで使用する方法を知っています – Andrea

答えて

0

私は、flashlightがすべてのタイプのelasticsearchクエリを処理することを期待していました。 2解決策: 1 /それは 2 /私は見つけられませんでした!私の側に

は、私はこのような懐中電灯SearchQueue.jsファイルを更新する必要がありました:場合は代わりに `qo.put( "オプション"、オプション)の

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

    // get your query string 
    var q = dat.query.query_string.query; 

    // build your ES query 
    var q1 = {"query":{"match":{"_all":q}}}; 

    if (this._assertValidSearch(key, dat)) { 
     // Perform (a very simple) ElasticSearch query 
     this.esc.search({ 
      index: dat.index, 
      type: dat.type, 
      // add options 
      from : dat.options.from, 
      size : dat.options.size, 
      // add ES Query 
      body : q1 
     }, function (error, response) { 
      if (error) { 
       this._reply(key, {error: error, total: 0}); 
      } else { 
       this._reply(key, response); 
      } 
     }.bind(this)); 
    } 
}, 
+0

こんにちは、私は懐中電灯を理解するのに困っています。私は反応ネイティブを使ってアプリを開発しています。プロジェクトに懐中電灯をクローンしますか?または、私は自分のプロジェクトで使用されるいくつかのファイルを取得するだけですか? – Yasir

関連する問題