Алголия в Лазурном

Я использую firebase для своего приложения для Android и выполняю полнотекстовый поиск с использованием Algolia, который предлагается во всех блогах. Я успешно разработал сценарий и его правильное функционирование. Теперь я хочу разместить сценарий для круглосуточной работы. 7. Поскольку у меня есть учетная запись Azure, как мне загрузить сценарий? Я попытался загрузить следующее как функцию, веб-приложение, но безуспешно.

PS: - Я пробовал Heroku, но не был удовлетворен.

Сценарий.

var http = require('http');
var port = process.env.port || 1337;
http.createServer(function (req, res) {
    res.writeHead(200, { 'Content-Type': 'text/plain' });
    res.end('Hello World\n');
}).listen(port);
    var dotenv = require('dotenv');
var firebaseAdmin = require("firebase-admin");
var algoliasearch = require('algoliasearch');
var algoliasearchHelper = require('algoliasearch-helper');


// load values from the .env file in this directory into process.env
dotenv.load();

// configure firebase
var serviceAccount = require("./serviceAccountKey.json");
firebaseAdmin.initializeApp({
  credential: firebaseAdmin.credential.cert(serviceAccount),
  databaseURL: process.env.FIREBASE_DATABASE_URL
});
var database = firebaseAdmin.database();

// configure algolia
var algolia = algoliasearch(process.env.ALGOLIA_APP_ID, process.env.ALGOLIA_API_KEY);
var index = algolia.initIndex('books');

var contactsRef = database.ref("/BookFair");

contactsRef.on('child_added', addOrUpdateIndexRecord);
contactsRef.on('child_changed', addOrUpdateIndexRecord);
contactsRef.on('child_removed', deleteIndexRecord);

function addOrUpdateIndexRecord(dataSnapshot) {
  // Get Firebase object
  var firebaseObject = dataSnapshot.val();
  // Specify Algolia's objectID using the Firebase object key
  firebaseObject.objectID = dataSnapshot.key;
  // Add or update object
  index.saveObject(firebaseObject, function(err, content) {
    if (err) {
      throw err;
    }
    console.log('Firebase object indexed in Algolia', firebaseObject.objectID);
  });
}

function deleteIndexRecord(dataSnapshot) {
  // Get Algolia's objectID from the Firebase object key
  var objectID = dataSnapshot.key;
  // Remove the object from Algolia
  index.deleteObject(objectID, function(err, content) {
    if (err) {
      throw err;
    }
    console.log('Firebase object deleted from Algolia', objectID);
  });
}

var queries = database.ref("/queries");

queries.on('child_added', addOrUpdateIndexRecordN);

function addOrUpdateIndexRecordN(dataSnapshot) {
  // Get Firebase object
  var firebaseObject = dataSnapshot.val();
  // Specify Algolia's objectID using the Firebase object key
  firebaseObject.objectID = dataSnapshot.key;
  // Add or update object

  var collegeName = "";
  var query_ID_LOLWA= "";
  var year="";
  var query = "";
  var counter = 0;

  for(var i in firebaseObject){
      var c = firebaseObject.charAt(i);
      if(c=='/'){
          counter = counter + 1;
          continue;
      }
      else{

          if(counter==2)
              collegeName = collegeName + c;
          else if(counter == 3)
              year = year+c;
          else if(counter == 1)
              query_ID_LOLWA = query_ID_LOLWA + c;
          else
              query = query +c;

      }

  }
  console.log(collegeName);
  console.log(year);
  console.log(query_ID_LOLWA);
  console.log(query);

  const query_final = query_ID_LOLWA;

  var helper = algoliasearchHelper(algoliasearch("****", "****"), 'books', {
    facets: ['collegeName', 'year','priority']});


  helper.on('result', function(data,query_ID_LOLWA){


        data.getFacetValues('priority',{sortBy: ['count:desc']});

        console.log(data.hits);

        var path_query = "/queries_answers/"+query_final;

        path_query = path_query.toString();
        console.log(path_query);
        if(data.hits.length==0){
            console.log("No results");
            database.ref(path_query).push(-1);
        }

        else if(data.hits.length>1){

            var ID = 1;
            var counter = -1;
            var length = data.hits.length-1;
            for(var h in data.hits){
                counter = counter + 1;
                if( (counter%5 == 0) && (counter != 0)){
                    ID = ID + 1;
                }
                database.ref(path_query+"/"+ID).push(data.hits[h].uuid);

            }
            database.ref(path_query+"/totalResults").push(data.hits.length);
        }
        else{
            database.ref(path_query+"/totalResults").push(data.hits.length);
            for(var h in data.hits)
            database.ref(path_query+"/1").push(data.hits[h].uuid);
        }

    });

    helper.addFacetRefinement('collegeName', collegeName);
    helper.addFacetRefinement('year',year);

    helper.setQuery(query);



    helper.search();



  /*index.search(firebaseObject, function(err, content) {
      if (err) {
        console.error(err);
        return;
    }
    console.log(content.hits);

    for (var h in content.hits) {

    console.log('Hit(' + content.hits[h].objectID + '): ' + content.hits[h].uuid);
    }

        database.ref("/query_result").push(content.hits);
    });*/




}

person THGRoy    schedule 01.09.2017    source источник
comment
Что вы подразумеваете под ***, но безуспешно? Были ли у вас какие-либо ошибки при развертывании сценария в Azure? Или не могли бы вы предоставить свой файл package.json?   -  person Aaron Chen    schedule 04.09.2017
comment
нет, я не получил никаких ошибок, но скрипт не работал   -  person THGRoy    schedule 04.09.2017


Ответы (1)


Без дополнительных подробностей, кроме but have been unsuccessful, единственный совет, который можно дать, — выполнить обычные шаги, чтобы развернуть функцию Azure на основе времени.

Самый простой способ — использовать Azure Portal:

  • Войдите в свою учетную запись Microsoft Azure
  • Создайте приложение-функцию для размещения своей функции.
  • Добавьте функцию, активируемую таймером
  • Выберите шаблон TimerTrigger-Javascript, чтобы начать

На этом этапе у вас будет функция, которая запускается каждую минуту. Вы можете проверить журналы, чтобы убедиться, что он работает. Теперь вы хотите настроить его частоту:

  • Обновите Расписание таймера функции (на вкладке Integrate), чтобы указать, как часто функция должна запускаться.
  • Наконец, замените код шаблона своим собственным.

Вы можете найти подробное руководство здесь с пояснениями, как выполнить каждый из этих шагов.

person PLNech    schedule 04.09.2017