Я смог исправить эту проблему, изменив порт прослушивания на 8887, как и вы, но вместо сохранения его сделайте «Сохранить как», а затем перезапишите его. Он спросит вас, хотите ли вы перезаписать файл и просто нажмите «да». Это сделало изменение постоянным. Всякий раз, когда я только что сохранял его, нажав «Сохранить» вместо «Сохранить как», он просто создаст новый файл httpd с меткой времени и не перезапишет оригинал, который не работает.
Я считаю, что вы можете сделать:
admin
.database()
.ref('/vals')
.orderByChild('name')
.startAt('cho')
.endAt("cho\uf8ff")
.once('value')
.then(c => res.send(c.val()));
это найдет vals, чье имя начинается с cho.
Обновление: с выпуском 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>
Есть пример, а сторонняя библиотека для упрощения интеграции здесь.
Упругое решение поиска в основном связывается с добавлением set del и предлагает получить то, что вы можете выполнить поиск текста. Затем он сохраняет содержимое в mongodb.
В то время как я люблю и reccomand эластичный поиск зрелости проекта, то же самое можно сделать без другого сервера, используя только базу данных firebase. Вот что я имею в виду: ( https://github.com/metaschema/oxyzen )
для индексации в основном функция:
в oxyzen реализация, последующие обновления документа ВСТУПИТЕЛЬНО читает индексирует и обновляет его, удаляя слова, которые больше не соответствуют, и добавляет новые.
последующие поиски слов могут напрямую находить документы в словах child. поиск нескольких слов осуществляется с использованием хитов