Dieser Artikel wurde maschinell übersetzt.

Microsoft Azure

Daten mit Azure Search besser durchsuchen

Bruno Terkaly

Laden Sie die Codebeispiele herunter

Bruno Terkaly Die Felder von Datenexploration, Echtzeit-Analysen und Maschinelles Lernen werden in viele kreative Möglichkeiten angewandt. Unternehmen bauen interessante Architekturen um eine Vielzahl von open-Source-Software-Pakete. Himmelblau-Suche ist ein solches Stück einer größeren Architektur. Himmelblau-Suche ist eine leistungsstarke neue Suche-Erfahrung für Ihre Websites und Anwendungen – selbst wenn Sie kein Suche-Experte.

Himmelblau-Suche ist ein vollständig verwalteter, Cloud-basierten Dienst, der eine einfache REST-API verwendet. Es umfasst Type-ahead Vorschläge, vorgeschlagenen Ergebnisse auf der Grundlage von in der Nähe von Treffern, Multi-faceted Navigation und die Möglichkeit, die Kapazität je nach Bedarf anpassen. Himmelblau-Suche bietet Volltextsuche mit Gewichtung, Rang und Ihre eigene Suche Verhalten anhand eines Schemas definiert durch Feldattribut Kombinationen. Daten werden sofort indiziert, die minimiert Suche Verzögerungen.

Die Notwendigkeit einer effektiven Suche wächst zusammen mit der enormen Größe der Datenspeicher. Auf Facebook allein verbringen Benutzer Hunderte Milliarden Minuten suchen jeden Monat. Um effizient Wikipedia suchen, müssten Sie 17 Millionen Einträge zu indizieren. Twitter bietet mehr als 600 Millionen Nutzer, erzeugen = mehr als 50.000 Tweets pro Tag. Volltext-Suche in dieser Größenordnung erfordert einige kreative Technik. Zum Indizieren und alle zu kuratieren ist diese Information nicht für schwache Nerven.

Viele Unternehmen, die für die Suche integraler Bestandteil ihres Unternehmens ist beginnen, arbeiten mit Azure G-Serie virtueller Maschinen mit 32 Kernen, 448 GB RAM und 6,5 TB Solid State Drive (SSD). Einige Ingenieure schreiben benutzerdefinierte Assembly und C-Code zur Optimierung der Cache-Kohärenz, für sowohl die Daten als auch die Anweisung speichert. Sie verwenden die Caches, um die Zeit verringern, die die CPU wartet eine Speicheranforderung sitzt zu erfüllen und die gesamte Datenmenge zu reduzieren, die übertragen werden muß. Eine Herausforderung in dieser großen, Multi-Core-Maschinen ist, gibt es viele Threads im Wettbewerb um den Speicherbus. Die Leistungssteigerung des Landes des L2 und L3-Caches ist Größenordnungen stärker. All dies ist wichtig, da immer große Datenmengen schnell in Ihrem Volltext-Engine von entscheidender Bedeutung ist.

Volltext-Suche richtig gemacht

Himmelblau-Suche bietet viele Vorteile. Es reduziert die Komplexität der Einrichtung und Verwaltung Ihrer eigenen Suchindex. Es ist ein vollständig verwalteter Dienst, mit dem Sie vermeiden den Streit des Beschäftigens Indexbeschädigung, service-Verfügbarkeit, Skalierung und Service-Updates. Einer der großen Vorteile ist, dass Azure Suche reichen, fein abgestimmte Ranking Modelle unterstützt. Dadurch können Sie die Suchergebnisse auf Unternehmensziele zu binden. Es bietet auch mehrsprachige Suche, Fehler Korrektur und Type-ahead Anregungen. Wenn Suchergebnisse schwach sind, können Azure Suche Abfragen basierend auf nahe Spiele vorschlagen. Sie können eine kurze Anleitung auf Bereitstellung an eine neue Instanz der Azure-Suche folgen bit.ly/1wYb8L8.

Das Tutorial führt Sie durch das erste Schritte und die Schritte, die Sie auf dem Portal durchführen müssen. Sie werden Azure Suche im Azure Management Portal bereitstellen (portal.azure.com), die erfordert zwei Dinge: der angegebene URL durch das Portal selbst und der API-Schlüssel. Die URL stellt den Endpunkt in der Cloud laufen Ihre Azure-Suchdienst Ihrer Clientanwendung sprechen. Die API-KEY müssen sorgfältig geschützt werden, denn es alle Zugriff auf Ihren Dienst bietet. Schließlich kann keiner Client auf den Azure-Suche-Dienst zuzugreifen, ohne Authentifizierung mit Hilfe dieses Schlüssels ermöglicht.

Es gibt Grenzen und Einschränkungen, von denen Sie in Bezug auf die Anzahl der Indizes, maximale Felder pro Index beachten müssen, maximale Dokument zählt und so weiter. Eine wichtige Einschränkung ist, dass es keine Kontingente oder Höchstwerte Abfragen zugeordnet. Abfragen pro Sekunde (QPS) sind variabel und abhängig von der verfügbaren Bandbreite und Wettbewerb für Systemressourcen.

Mit dem kostenlosen Azure Suche-Service sind die Azure Compute und Speicher-Ressourcen sichern Ihre gemeinsamen Dienst mehrere Abonnenten freigegeben, sodass QPS für Ihre Lösung variiert, je nachdem, wie viele Arbeitsauslastungen gleichzeitig ausgeführt werden. Für dedizierte (STANDARD SKU) Dienste sind Ressourcen alle Kunden gewidmet und nicht geteilt.

Sobald Sie Ihre URL und API-KEY haben, können Sie den Service nutzen. Der einfachste Weg dazu ist Fiddler, weil Sie eigene HTTP-Anforderungen zusammenstellen können. (Erhalten Sie ein kostenloses Exemplar des Fiddler bei bit.ly/1jKA1UJ.) Himmelblau Suche einfache HTTP verwendet, so ist es trivial, Insert und Abfrage Daten mit Fiddler (siehe Abbildung 1). Später in diesem Artikel sehen Sie, wie mithilfe von Node.js mit Azure Suche reden.

ausführen eine Insert in himmelblau-Suche mit Fiddler
Abbildung 1 ausführen eine Insert in himmelblau-Suche mit Fiddler

Wie Sie sehen können, gibt es vier Dinge mit denen Sie sich beschäftigen:

  • HTTP-Verb
  • URL
  • Anfrage-Header
  • Anfrage-Fußzeile

Das HTTP-Verb (PUT, POST, GET oder löschen) ordnet verschiedene Operationen, ob der Vorgang der Schema-Definition, Dateneingabe und So weiter. Zum Beispiel eine Schemadefinition Karten gesetzt und POST ordnet Daten einfügen. Die URL ist die Azure Portal verfügbar und kann je nach Ihrer Abfrage-Parameter ändern. Der API-Schlüssel wird im Anforderungsheader gesendet. Der Anforderungstext ist immer eine JSON-Darstellung eines Schemas oder Daten eingefügt wird.

Himmelblau Suche kann in einer größeren Architektur eine wichtige Rolle spielen. Abbildung 2 zeigt eine Architektur, die Azure-Suche nutzt. Beginnen Sie mit der grundlegenden Authentifizierungsebene, wo Sie einige Optionen haben. Beispielsweise können Sie die Azure Active Directory Graph API mit OAuth2 mit Node.js. Apropos Node.js, können Sie es als Proxy für den URL Endpunkt der Azure-Suche, einige Struktur und Kontrolle zu Ihrem Dienst.

himmelblau Suche in größeren Architekturen
Abbildung 2 himmelblau Suche in größeren Architekturen

Eines der herausragenden Merkmale von Azure-Suche ist Sie indizieren und suchen fast alle strukturierten Daten können – außer Fotos, Bildern und Videos. Abbildung 2 zeigt einige mögliche Datenquellen für die Azure-Suche. Da relationale Datenbanken sind nicht gut geeignet, um die Volltext-Suche, sind viele Start-ups ihre relationalen Daten und Kennzahlen in Azure Suche exportieren. Dies ist auch vorteilhaft, weil es die Belastung der Volltext-Suche in relationalen Datenbanken entlastet.

Dies bedeutet nicht, dass Azure Suche ein Ende, die alle hat oder alle. Du musst noch meine Daten mit Karte/reduzieren Technologien wie Hadoop oder HDInsight Computerlernen Algorithmen wie clustering, anwenden wo werden Textdokumente in topisch Beiträge zu diesem Thema zusammengefasst.

Stellen Sie sich einen Tweet analysieren und verleiht ihm eine Partitur für wie wahrscheinlich es in eine andere Kategorie gehört. Z. B. möglicherweise eine Kategorie namens Rants für emotional aufgeladenen Kritik oder anderen positiven Meinungen Raves gefordert. Häufig werden linear Classifier Algorithmen für solche Einsicht. Himmelblau-Suche ist nicht dazu in der Lage. Aber stell dir vor, wie Sie Dokumente in Azure Suche index basiert auf dem Weg Sie kategorisieren und Analysieren von Daten.

Node.js

Jetzt wende ich mich meine Aufmerksamkeit zu schreiben, ein Node.js-front-End, die ich als Proxyschicht vor Azure Suche verwenden werde.

  • Schritt 1 müssen Sie abschließen, das erste begann Tutorial weiter oben in diesem Artikel erwähnt, so dass Azure-Suche auf dem Portal bereitgestellt wird. Daran erinnern Sie, dass Sie die URL und die API-KEY benötigen.
  • Schritt 2 müssen Sie downloaden und installieren die Node.js-Laufzeit lokal auf dem Entwicklungscomputer. Sie können dies bei nodejs.org/download finden. Meine Installation landete in den Ordner c:\program Files\nodejs. Es wird empfohlen, dass man eine grundlegende "Hello World" in Node.js ausgeführt werden, bevor Sie weiter fortfahren.
  • Schritt 3 müssen Sie zur Bestätigung der Knoten- Paket-Manager (NPM) korrekt installiert und konfiguriert ist. NPM können Sie Node.js-Anwendungen (JavaScript) zur Verfügung auf der NPM-Registrierung zu installieren.
  • Schritt 4 umfasst die Installation des Elasticsearch-Pakets, das Schreiben von Code für die Kommunikation mit Azure Suche vereinfacht.

Nachdem Sie diese Schritte abgeschlossen haben, können Sie zur Eingabeaufforderung zurückzukehren, navigieren zu welchem Verzeichnis, die Sie mögen und Start Code schreiben. Wenn einige Fehler mit NPM auftreten, müssen Sie einige Umgebungsvariablen überprüfen:

C:\node>set nodejs=C:\Program Files\nodejs\
C:\node>set node_path=C:\Program Files\nodejs\node_modules\*
C:\node>set npm=C:\Program Files\nodejs\

Bauen Sie die Node.js-Lösung

Jetzt bist du bereit, einige Node.js-Code zum Ausführen auf Ihrem lokalen System zu illustrieren, Kommunikation mit Azure Suche zu entwickeln. Node.js erleichtert zum Einfügen und Abfrage von Daten in Azure-Suche. Vorausgesetzt, dass Sie eine Azure-Such-URL des terkaly.search.windows.net. Sie würde dies die Azure Management Portal abrufen. Sie benötigen auch Ihren API-Schlüssel, die für dieses Beispiel ist B7D12B8CA3D018EC09C754F95CA552D2.

Es gibt mehr als einen Weg zur Entwicklung von Node.js Anwendungen auf dem lokalen Computer. Wenn du des Debuggers in Visual Studio, dann werden die Node.js-Werkzeuge für Visual Studio -Plug-in verwenden möchten (nodejstools.codeplex.com). Wenn Sie die Befehlszeile wie, lesen Sie Nodejs.org. Nach der Installation Node.js ist es wichtig, das nationale Palastmuseum zu integrieren. Dadurch können Sie die Node.js-Anwendungen zur Verfügung auf der NPM-Registrierung zu installieren. Das hier verwendete Kernpaket heißt Anfrage.

Der Code in Abbildung 3 ist einfach. Es macht das gleiche wie beschrieben im Lernprogramm unter bit.ly/1Ilh6vB, der einzige Unterschied ist, Sie haben dieser Code und Node.js mit dem Anfrage-Paket implementiert. Der Code umfasst einige der allgemeineren Anwendungsfälle, wie Sie einen Index erstellen, Einfügen von Daten und natürlich Abfragen durchführen. Es gibt eine Reihe von Rückrufen hier, die ein Schema zu definieren, fügen Sie Daten und Abfragen von Daten.

Abbildung 3-Node.js-Code, der zeigt, wie Sie einen Index erstellen, Daten einfügen und Abfragen von Daten

var request = require('request');
//////////////////////////////////////////////////
// OPTIONS FOR HTTP PUT
// Purpose:    Used to create an index called hotels
//////////////////////////////////////////////////
var optionsPUT = {
  url: 'https://terkaly.search.windows.net/indexes/hotels?api-version=2014-07-31-Preview',
  method: 'PUT',
  json: true,
  headers: {
    'api-key': 'B7D12B8CA3D018EC09C754F95CA552D2',
    'Content-Type': 'application/json'
  },
  body: {
    "name": "hotels",
    "fields": [
      { "name": "hotelId", "type": "Edm.String", "key": true, "searchable": false },
      { "name": "baseRate", "type": "Edm.Double" },
      { "name": "description", "type": "Edm.String", "filterable": false, 
        "sortable": false,
        "facetable": false, "suggestions": true },
      { "name": "hotelName", "type": "Edm.String", "suggestions": true },
      { "name": "category", "type": "Edm.String" },
      { "name": "tags", "type": "Collection(Edm.String)" },
      { "name": "parkingIncluded", "type": "Edm.Boolean" },
      { "name": "smokingAllowed", "type": "Edm.Boolean" },
      { "name": "lastRenovationDate", "type": "Edm.DateTimeOffset" },
      { "name": "rating", "type": "Edm.Int32" },
      { "name": "location", "type": "Edm.GeographyPoint" }
    ]
  }
};
//////////////////////////////////////////////////
// OPTIONS FOR HTTP POST
// Purpose: Used to insert data  
//////////////////////////////////////////////////
var optionsPOST = {
  url: 'https://terkaly.search.windows.net/indexes/hotels/docs/
    index?api-version=2014-07-31-Preview',
  method: 'POST',
  json: true,
  headers: {
    'api-key': 'B7D12B8CA3D018EC09C754F95CA552D2',
    'Content-Type': 'application/json'
  },
  body: {
    "value": [
    {
      "@search.action": "upload",
      "hotelId": "1",
      "baseRate": 199.0,
      "description": "Best hotel in town",
      "hotelName": "Fancy Stay",
      "category": "Luxury",
      "tags": ["pool", "view", "wifi", "concierge"],
      "parkingIncluded": false,
      "smokingAllowed": false,
      "lastRenovationDate": "2010-06-27T00:00:00Z",
      "rating": 5,
      "location": { "type": "Point", "coordinates": [-122.131577, 47.678581] }
    },
    {
      "@search.action": "upload",
      "hotelId": "2",
      "baseRate": 79.99,
      "description": "Cheapest hotel in town",
      "hotelName": "Roach Motel",
      "category": "Budget",
      "tags": ["motel", "budget"],
      "parkingIncluded": true,
      "smokingAllowed": true,
      "lastRenovationDate": "1982-04-28T00:00:00Z",
      "rating": 1,
      "location": { "type": "Point", "coordinates": [-122.131577, 49.678581] }
    },
    {
      "@search.action": "upload",
      "hotelId": "3",
      "baseRate": 279.99,
      "description": "Surprisingly expensive",
      "hotelName": "Dew Drop Inn",
      "category": "Bed and Breakfast",
      "tags": ["charming", "quaint"],
      "parkingIncluded": true,
      "smokingAllowed": false,
      "lastRenovationDate": null,
      "rating": 4,
      "location": { "type": "Point", "coordinates": [-122.33207, 47.60621] }
    },
    {
      "@search.action": "upload",
      "hotelId": "4",
      "baseRate": 220.00,
      "description": "This could be the one",
      "hotelName": "A Hotel for Everyone",
      "category": "Basic hotel",
      "tags": ["pool", "wifi"],
      "parkingIncluded": true,
      "smokingAllowed": false,
      "lastRenovationDate": null,
      "rating": 4,
      "location": { "type": "Point", "coordinates": [-122.12151, 47.67399] }
    }
    ]
  }
};
//////////////////////////////////////////////////
// OPTIONS FOR HTTP GET
// Purpose:    Used to do a perform a query
//////////////////////////////////////////////////
var optionsGET = {
  url: 'https://terkaly.search.windows.net/indexes/hotels/
    docs?search=motel&facet=category&facet=rating,
    values:1|2|3|4|5&api-version=2014-07-31-Preview',
  method: 'GET',
  json: true,
  headers: {
    'api-key': 'B7D12B8CA3D018EC09C754F95CA552D2',
    'Content-Type': 'application/json'
  },
  body: {
  }
};
request(optionsPUT, callbackPUT);
//////////////////////////////////////////////////
// Purpose:    Used to create an index
// Http Verb:  PUT
// End Result: Defines an index using the fields
// that make up the index definition.
//////////////////////////////////////////////////
function callbackPUT(error, response, body) {
  if (!error) {
    try {
      if (response.statusCode === 204) {
          console.log('***success in callbackPUT***');
          request(optionsPOST, callbackPOST);
      }
    } catch (error2) {
      console.log('***Error encountered***');
      console.log(error2);
    }
  } else {
    console.log('error');
    console.log(error);
  }
}
//////////////////////////////////////////////////
// Purpose:    Used to insert data
// End Result: Inserts a document
//////////////////////////////////////////////////
function callbackPOST(error, response, body) {
  if (!error) {
    try {
      var result = response.request.response.statusCode;
      if (result === 200) {
          console.log('***success in callbackPOST***');
          console.log("The statusCode = " + result);
        // Perform a query
        request(optionsGET, callbackGET);
      }
    } catch (error2) {
      console.log('***Error encountered***');
      console.log(error2);
    }
  } else {
    console.log('error');
    console.log(error);
  }
}
//////////////////////////////////////////////////////////////
// Purpose:    Used to retrieve information
// Http Verb:  GET
// End Result: Query searches on the term "motel" and retrieves
// facet categories for ratings.
//////////////////////////////////////////////////////////////
function callbackGET(error, response, body) {
  if (!error) {
    try {
      var result = response.request.response.statusCode;
      if (result === 200) {
          result = body.value[0];
          console.log('description = ' + result.description);
          console.log('hotel name = ' + result.hotelName);
          console.log('hotel rate = ' + result.baseRate);
      }
      console.log('***success***');
    } catch (error2) {
      console.log('***Error encountered***');
      console.log(error2);
    }
  } else {
    console.log('error');
    console.log(error);
  }
}

Die Rückruf-Kette ist auch einfach. Es beginnt mit einer einfachen GET, dann verschiebt, PUT, POST und eine zweite (mit der Abfrage) erhalten. Es veranschaulicht die Kern-Vorgänge, die Sie mit Azure-Suche verwenden würde. Erstellen Sie zunächst ein Schema für die Dokumente, die Sie später hinzufügen werde. Verwenden Sie ein PUT HTTP-Verb, um ein Schema zu definieren. Verwenden Sie anschließend einen Beitrag zum Einfügen von Daten. Schließlich verwenden Sie einen GET, um die Daten abzufragen.

Zusammenfassung

Das Ziel dieses Artikels war, einige spannende Dinge passiert da draußen in der Welt des Start-ups, speziell im Bereich der sozialen Netzwerke Analytics verfügbar zu machen. Können Azure Suche als ein Stück in einer größeren Lösung wo benötigen Sie eine hoch entwickelte und leistungsfähige Suchfunktion, mit Ihrer Website und Anwendungen zu integrieren. Können Sie die Feinabstimmung Ranking Modelle verwenden, um die Suchergebnisse auf Unternehmensziele, sowie zuverlässige Durchsatz und Speicher zu binden.


Bruno Terkaly ist principal Software Engineer bei Microsoft mit dem Ziel der Entwicklung von branchenführenden Anwendungen und Diensten über Geräte aktivieren. Er ist verantwortlich für das fahren die Topcloud und mobilen Möglichkeiten in den Vereinigten Staaten und darüber hinaus von einer Technologie-Aktivierung-Perspektive. Er hilft Partnern, die ihre Anwendungen auf den Markt zu bringen, indem Sie Anleitungen zur Architektur und tiefgehende technische Engagement während der ISV Bewertung, Entwicklung und Bereitstellung. Er arbeitet auch eng mit der Cloud und mobile engineering Gruppen, für das Feedback und die Roadmap zu beeinflussen.

Unser Dank gilt den folgenden technischen Experten von Microsoft für die Durchsicht dieses Artikels: Liam Cavanagh, Venugopal Latchupatula, Eugene Shvets, Simon Gurevich, Govind Kanshi, Raj Krishnan