Запрос для поиска в базе данных Firebase (Android) [дубликат]

Я смог исправить эту проблему, изменив порт прослушивания на 8887, как и вы, но вместо сохранения его сделайте «Сохранить как», а затем перезапишите его. Он спросит вас, хотите ли вы перезаписать файл и просто нажмите «да». Это сделало изменение постоянным. Всякий раз, когда я только что сохранял его, нажав «Сохранить» вместо «Сохранить как», он просто создаст новый файл httpd с меткой времени и не перезапишет оригинал, который не работает.

36
задан Frank van Puffelen 14 June 2017 в 13:33
поделиться

3 ответа

Я считаю, что вы можете сделать:

admin
.database()
.ref('/vals')
.orderByChild('name')
.startAt('cho')
.endAt("cho\uf8ff")
.once('value')
.then(c => res.send(c.val()));

это найдет vals, чье имя начинается с cho.

источник

7
ответ дан Ced 16 August 2018 в 01:01
поделиться
  • 1
    По моему пониманию startAt () и endAt () предназначены для ограничения результатов между двумя конкретными объектами в базе данных, а не для запроса содержимого строки. – Heisenbug 3 September 2017 в 19:11
  • 2
    @Heisenbug это работает, исходное видео от самого Google. – Ced 3 September 2017 в 20:12
  • 3
    это помогло мне создать небольшую функцию поиска. Я создал индекс каждого слова, связав каждый из них с соответствующим элементом. Затем, при поиске, я рассчитываю попадание на каждый элемент. – Guillaume Gendre 5 September 2017 в 12:47
  • 4
    @Heisenbug см. ^ – Ced 6 September 2017 в 03:01
  • 5
    @Ced Есть ли способ получить имена, которые содержат cho, не только начинаются с них (qwerty cho , ab cho ba)? – Ehtesham Hasan 19 February 2018 в 15:01

Обновление: с выпуском Cloud Functions для Firebase есть еще один элегантный способ сделать это, а также связывая Firebase с Algolia через функции . Компромисс здесь заключается в том, что функции / Algolia практически нулевое обслуживание, но, вероятно, при увеличении стоимости по сравнению с roll-your-own в узле.

В Firebase в настоящее время нет запросов на контент. Многие из наиболее распространенных сценариев поиска, такие как поиск по атрибуту, будут испечены в Firebase по мере расширения API.

Между тем, безусловно, возможно вырастить свои собственные. Тем не менее, поиск - это обширная тема (думаю, создание огромного хранилища данных в реальном времени), сильно заниженная и критическая особенность вашего приложения - не тот, который вы хотите сделать ad hoc или даже зависеть от кого-то вроде Firebase, чтобы предоставить от вашего имени , Поэтому обычно проще использовать масштабируемый сторонний инструмент для обработки индексирования, поиска, сопоставления тегов / шаблонов, нечеткой логики, взвешенных ранжировок и т. Д.

В блоге Firebase есть сообщение в блоге по индексированию с ElasticSearch , который описывает простой подход к интеграции быстрой, но чрезвычайно мощной поисковой системы в ваш сервер Firebase.

По сути, это делается в два этапа. Контролируйте данные и индексируйте их:

var Firebase = require('firebase');
var ElasticClient = require('elasticsearchclient')

// initialize our ElasticSearch API
var client = new ElasticClient({ host: 'localhost', port: 9200 });

// listen for changes to Firebase data
var fb = new Firebase('<INSTANCE>.firebaseio.com/widgets');
fb.on('child_added',   createOrUpdateIndex);
fb.on('child_changed', createOrUpdateIndex);
fb.on('child_removed', removeIndex);

function createOrUpdateIndex(snap) {
   client.index(this.index, this.type, snap.val(), snap.name())
     .on('data', function(data) { console.log('indexed ', snap.name()); })
     .on('error', function(err) { /* handle errors */ });
}

function removeIndex(snap) {
   client.deleteDocument(this.index, this.type, snap.name(), function(error, data) {
      if( error ) console.error('failed to delete', snap.name(), error);
      else console.log('deleted', snap.name());
   });
}

Запросите индекс, когда хотите выполнить поиск:

<script src="elastic.min.js"></script>
 <script src="elastic-jquery-client.min.js"></script>
 <script>
    ejs.client = ejs.jQueryClient('http://localhost:9200');
    client.search({
      index: 'firebase',
      type: 'widget',
      body: ejs.Request().query(ejs.MatchQuery('title', 'foo'))
    }, function (error, response) {
       // handle response
    });
 </script>

Есть пример, а сторонняя библиотека для упрощения интеграции здесь.

22
ответ дан Kato 16 August 2018 в 01:01
поделиться
  • 1
    ах спасибо, но я фактически использую firebase для моего приложения для Android, и у меня мало знаний javascript. Можете ли вы дать мне ссылку или небольшой пример, например, этот пример javascript, написанный как код Java? Я также попытаюсь понять, что код javascript сейчас :) Спасибо – yrazlik 20 March 2014 в 23:29
  • 2
    Это все еще актуально в 2016 году? – Pier 3 June 2016 в 18:14
  • 3
    Концептуально актуальный. Синтаксис вызовов API несколько отличается. – Kato 3 June 2016 в 19:02
  • 4
    Привет, Като, я задал здесь вопрос о том, как настроить фонарик с новой Firebase, и надеялся, что вы сможете предоставить некоторые из своих знаний! Я был бы очень признателен, спасибо! [Д0] stackoverflow.com/questions/38276209/… – Hellojeffy 8 July 2016 в 22:26
  • 5
    К сожалению, вам нужно перейти на Blaze Plan, чтобы использовать Firebase Cloud Functions с Algolia – Rosário Pereira Fernandes 1 April 2017 в 22:25

Упругое решение поиска в основном связывается с добавлением set del и предлагает получить то, что вы можете выполнить поиск текста. Затем он сохраняет содержимое в mongodb.

В то время как я люблю и reccomand эластичный поиск зрелости проекта, то же самое можно сделать без другого сервера, используя только базу данных firebase. Вот что я имею в виду: ( https://github.com/metaschema/oxyzen )

для индексации в основном функция:

  1. JSON строит документ.
  2. удаляет все имена свойств и JSON, оставляя только данные (регулярное выражение).
  3. удаляет все теги xml (следовательно, html) и атрибуты (помните старое руководство , «данные не должны быть в атрибутах xml»), чтобы оставить только чистый текст, если присутствует xml или html.
  4. удаляет все специальные символы и заменяет их пробелом (regex)
  5. все экземпляры нескольких пробелов с одним пространством (regex)
  6. разбиваются на пробелы и циклы:
  7. для каждого слова добавляет refs в документ в некоторой структуре индекса в вашем db, в основном содержит дочерние элементы названный со словами с дочерними именами с экранированной версией «ref / inthedatabase / dockey»
  8. , затем вставляет документ, поскольку обычное приложение firebase будет делать

в oxyzen реализация, последующие обновления документа ВСТУПИТЕЛЬНО читает индексирует и обновляет его, удаляя слова, которые больше не соответствуют, и добавляет новые.

последующие поиски слов могут напрямую находить документы в словах child. поиск нескольких слов осуществляется с использованием хитов

0
ответ дан user3191409 16 August 2018 в 01:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: