Squeak.ru - шаблоны программирования

Как запросить Firebase с помощью ElasticSearch и Flashlight?

Когда я использую Flashlight с поиском Firebase и Elastic с прямым запросом, он работает:

запрос

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

код

...
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);
...

Но когда я хочу не ограничиваться только 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
        }
     }
  }

Почему параметр options можно найти по адресу https://github.com/firebase/flashlight/issues/29#issuecomment-129340229


  • Если вместо qo.put("options", options); использовать qo.put("from", 0); qo.put("to", 50);, это сработает? 03.05.2016
  • @AndreiStefan только что опробовал (с соответствующими правилами безопасности). Журнал запроса: :{"from":0,"index":"firebase","query":{"query_string":{"query":"*"}},"to":50,"type":"tasting"}но он все еще не возвращает хиты 03.05.2016
  • Я знаю, что я не доказываю решение, но как я могу научиться использовать FlashLight и на каком языке я должен учиться, другими словами, как вы узнали, как использовать FlashLight с Firebase 09.11.2016

Ответы:


1

Я ожидал, что фонарик будет обрабатывать все типы запросов elasticsearch. 2 решения: 1/ это не так 2/ я не нашел как!

Со своей стороны мне пришлось обновить файл Flashlight SearchQueue.js следующим образом:

_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));
    }
},
20.05.2016
  • Привет, у меня проблемы с пониманием Flashlight, я разрабатываю приложение, используя React Native. Могу ли я клонировать Flashlight в свой проект? или я просто получаю некоторые файлы для использования в моем проекте? 10.12.2017
  • Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...