Heim Backend-Entwicklung C#.Net-Tutorial So verwenden Sie ES in C#

So verwenden Sie ES in C#

Feb 08, 2017 pm 01:32 PM

Einführung in Elasticsearch

Elasticsearch (ES) ist eine auf Lucene basierende Open-Source-Suchmaschine, die nicht nur stabil, zuverlässig und schnell ist, sondern auch eine gute horizontale Skalierbarkeit aufweist .

Was ist Elasticsearch?

Elasticsearch ist eine Open-Source-Suchmaschine, die auf Apache Lucene(TM) basiert. Ob im Open-Source- oder proprietären Bereich, Lucene kann als die fortschrittlichste und leistungsstärkste Suchmaschine angesehen werden , die bisher umfassendste Suchmaschinenbibliothek.
Lucene ist jedoch nur eine Bibliothek. Um seine Leistungsfähigkeit zu nutzen, müssen Sie es mithilfe von C# in Ihre Anwendung integrieren. Lucene ist sehr komplex und Sie benötigen ein tiefes Verständnis des Retrievals, um zu verstehen, wie es funktioniert.
Elasticsearch ist ebenfalls in Java geschrieben und verwendet Lucene, um Indizes zu erstellen und Suchfunktionen zu implementieren. Sein Zweck besteht jedoch darin, die Volltextsuche zu vereinfachen und die Komplexität von Lucene durch eine einfache und kohärente RESTful-API zu verbergen.
Elasticsearch ist jedoch mehr als nur Lucene und Volltextsuchmaschinen, es bietet auch:

Verteilte Dateispeicherung in Echtzeit, jedes Feld ist indiziert und durchsuchbar

Echtzeit Analyse Die verteilte Suchmaschine

kann auf Hunderte von Servern skaliert werden und Petabytes an strukturierten oder unstrukturierten Daten verarbeiten

Darüber hinaus sind alle diese Funktionen in einem Server integriert, Ihre Anwendungen können über einen mit ihm interagieren einfache RESTful-API, Clients in verschiedenen Sprachen und sogar die Befehlszeile. Der Einstieg in Elasticsearch ist einfach, bietet viele sinnvolle Standardeinstellungen und verbirgt komplexe Suchmaschinentheorien vor Anfängern. Es ist sofort einsatzbereit (installiert und einsatzbereit) und erfordert nur minimale Einarbeitung für den Einsatz in einer Produktionsumgebung. Elasticsearch ist unter der Apache 2-Lizenz lizenziert und kann kostenlos heruntergeladen, verwendet und geändert werden.
Mit zunehmendem Wissen können Sie die erweiterten Funktionen von Elasticsearch an verschiedene Problembereiche anpassen. All dies ist konfigurierbar und die Konfiguration ist sehr flexibel.

Verwenden Sie C#, um ES zu betreiben

NEST ist ein High-Level-Client, der alle Anforderungs- und Antwortobjekte abbilden kann, über eine stark typisierte Abfrage-DSL (domänenspezifische Sprache) verfügt und .net verwenden kann Für Funktionen wie Kovarianz und automatische Zuordnung von POCOs verwendet NEST intern weiterhin den Elasticsearch.Net-Client. Der Elasticsearch.net (NEST)-Client bietet zur Benutzerfreundlichkeit eine stark typisierte Abfrage-DSL. Der Quellcode kann heruntergeladen werden.

1. So installieren Sie NEST

Öffnen Sie das Tools-Menü von VS, geben Sie über die NuGet-Paketmanagerkonsole den folgenden Befehl ein, um NEST zu installieren

Install-Package NEST

Die folgenden drei DLLs werden nach der Installation referenziert

Elasticsearch.Net.dll (2.4.4) Nest.dll (2.4.4) Newtonsoft.Json.dll (Version 9.0)

2. Link zu Elasticsearch

Sie können einen Verbindungspool verwenden, um über einen einzelnen Knoten eine Verbindung zum Elasticsearch-Cluster herzustellen, oder die Verwendung eines Verbindungspools hat mehr Vorteile als die Verbindung eines einzelner Knoten zu Elasticsearch, z. B. zur Unterstützung von Lastausgleich, Failover usw.

Durch einzelnen Link:

var node = new Uri("http://myserver:9200");
var settings = new ConnectionSettings(node);
var client = new ElasticClient(settings);

Link durch den Verbindungspool:

var nodes = new Uri[]

{

new Uri("http ://meinserver1:9200"),

neuer Uri("http://meinserver2:9200"),

neuer Uri("http://meinserver3:9200")

};


var pool = new StaticConnectionPool(nodes);

var Settings = new ConnectionSettings(pool);

var client = new ElasticClient(settings);

NEST Index

Um zu wissen, welchen Index die Anfrage bearbeiten muss, erwartet die Elasticsearch-API als Teil einen oder mehrere Indexnamen der Anfrage.

1. Geben Sie den Index an

1. Sie können .DefaultIndex() über ConnectionSettings verwenden, um den Standardindex anzugeben. Wenn in einer Anfrage kein bestimmter Index angegeben ist, fordert NEST den Standardindex an.

var settings = new ConnectionSettings()
.DefaultIndex("defaultindex");

2. Sie können .MapDefaultTypeIndices() über ConnectionSettings verwenden, um Indizes anzugeben, die CLR-Typen zugeordnet sind.

var Settings = new ConnectionSettings()
.MapDefaultTypeIndices(m => m
.Add(typeof(Project), "projects")
);

Hinweis: Die Angabe von Indizes über .MapDefaultTypeIndices() hat eine höhere Priorität als die Angabe von Indizes über .DefaultIndex() und eignet sich besser für einfache Objekte (POCO)

3. Darüber hinaus können Sie auch explizit den Indexnamen für die Anfrage angeben, zum Beispiel:

var Response = client.Index(student, s=>s.Index("db_test") );
var result = client.Search(s => s.Index("db_test"));
var result = client.Delete(null, s => s. Index("db_test" ));

Hinweis: Bei der tatsächlichen Angabe eines Indexnamens für eine Anfrage ist diese Priorität am höchsten und höher als der Index, der auf die beiden oben genannten Arten angegeben wurde.

4. Einige Elasticsearch-APIs (z. B. Abfrage) können einen oder mehrere Indexnamen oder das spezielle Flag _all verwenden, um Anfragen an mehrere oder alle Knoten auf NEST zu senden

//Einzelner Knoten anfordern

var singleString = Nest.Indices.Index("db_studnet");

var singleTyped = Nest.Indices.Index();


ISearchRequest singleStringRequest = new SearchDescriptor().Index(singleString);

ISearchRequest singleTypedRequest = new SearchDescriptor().Index(singleTyped);


//Mehrere Knoten anfordern

var ManyStrings = Nest.Indices.Index("db_studnet", "db_other_student");

var ManyTypes = Nest .Indices. Index().And();


ISearchRequest ManyStringRequest = new SearchDescriptor().Index(manyStrings);

ISearchRequest manyTypedRequest = new SearchDescriptor().Index(manyTypes);


//Alle Knoten anfordern

var indicesAll = Nest .Indices. All;

var allIndices = Nest.Indices.AllIndices;


ISearchRequest indicesAllRequest = new SearchDescriptor().Index(indicesAll) ;

ISearchRequest allIndicesRequest = new SearchDescriptor().Index(allIndices);


2. Index erstellen

Elasticsearch API Ermöglicht es Ihnen Konfigurieren Sie den Index beim Erstellen des Index, zum Beispiel:

var descriptor = new CreateIndexDescriptor("db_student")
.Settings(s => s.NumberOfShards(5).NumberOfReplicas(1) );
client.CreateIndex(descriptor);

Dies gibt an, dass die Anzahl der Shards des Index 5 und die Anzahl der Kopien 1 beträgt.

3. Index löschen

Mit der Elasticsearch-API können Sie den Index löschen, zum Beispiel:

var descriptor = new DeleteIndexDescriptor("db_student").Index("db_student") ;
client.DeleteIndex(descriptor)

Der zu löschende Indexname „db_student“ wird hier angegeben. Weitere Löschanwendungsfälle sind:

/ /Löschen Sie den angegebenen Index. Alle Indizes unter dem Knoten
var descriptor = new DeleteIndexDescriptor("db_student").AllIndices();

NEST Mapping

NEST bietet eine Vielzahl von Zuordnungsmethoden. die hier vorgestellt werden.

1. Einfache Implementierung

1. Definieren Sie den vom Unternehmen benötigten POCO und geben Sie das erforderliche Attribut an

[ElasticsearchType(Name = "student")]

public class Student

{

[Nest.String(Index = FieldIndexOption.NotAnalyzed)]

public string Id { get; >


[Nest.String(Analyzer = "standard")]

öffentlicher String Name { get; 🎜 > [Nest.String(Analyzer = "standard")]

public string Beschreibung { get }


public DateTime DateTime { get; set ; }

}

2. Dann verwenden wir .AutoMap(), um die Zuordnung zu implementieren

var descriptor = new CreateIndexDescriptor("db_student")

. Settings(s => s.NumberOfShards(5).NumberOfReplicas(1))

.Mappings(ms => ms

.Map(m => m . AutoMap())

);

client.CreateIndex(descriptor);

Hinweis: Es kann über .Properties überschrieben werden () Zuordnung definiert durch Attribut

2. Einführung in Attribut

1. NumberAttribute

3. BooleanAttribute

4. DateAttribute

So verwenden Sie ES in C#

5. ObjectAttribute

So verwenden Sie ES in C#

NEST-Suche

NEST bietet Unterstützung für die Lambda-Kettenabfrage DLS (domänenspezifische Sprache). Im Folgenden finden Sie eine einfache Implementierung und eine kurze Beschreibung jeder Abfrage.

1. Einfache Implementierung

1. Definieren Sie SearchDescriptor, um die Implementierung komplexer Geschäfte im Projekt zu erleichtern

var query = new Nest.SearchDescriptor() ;
var result = client.Search(x => query)

2. Dokumente abrufen, deren Titel und Inhalt den Schlüssel enthalten und deren Autor nicht mit „Pretty Girl“ übereinstimmt

query.Query(q =>

q.Bool(b =>

) b.Must(m =>

MultiMatch(t => t.Fields(f => f.Field(obj => obj.Title).Field(obj => obj.Content)).Query(key))

)

.MustNot(m =>

m.QueryString(t => t.Fields(f => f.Field(obj => obj.Author )). Abfrage("wenli"))

)

)

);

Hinweis:

Wenn Elasticsearch die Standard-Wortsegmentierung verwendet und die Attribute von Titel und Inhalt [Nest.String(Analyzer = "standard")] lauten.

Wenn Elasticsearch die IK-Wortsegmentierung verwendet, lauten die Attribute von Titel und Inhalt [Nest.String(Analyzer = "ikmaxword")] oder [Nest.String(Analyzer = "ik_smart")]

Das Attribut des Autors ist [Nest.String(Index = FieldIndexOption.NotAnalyzed)] und die Verwendung des Analysators

3. Filtern Sie Dokumente, deren Autor gleich „Historical River“ ist

query.PostFilter(x => x.Term(t => t.Field(obj => obj.Author).Value(" wenli")));


4. Filtern Sie Dokumente, deren Autor gleich „Historical River“ oder gleich „Friendship Boat“ ist, und stimmen Sie mit mehreren überein Autoren durch Leerzeichen getrennt

query .PostFilter(x => x.QueryString(t => t.Fields(f =>


5. Dokumente mit einer Zahl zwischen 1 und 100 filtern

query.PostFilter(x => x.Range(t => t.Field(obj => obj. Number).GreaterThanOrEquals(1).LessThanOrEquals(100)));


6. Sortieren nach dem Score-Flashback

query.Sort(x = > query.Highlight(h => h

.PreTags( "")

.PostTags("")


.Fields (

f => f.Field(obj => ; obj.Title),

f => f.Field(obj => obj.Content),

f => f.Field("_all")

)

);

8. Abfrageinhalte zusammenstellen, Daten organisieren und frühere Anrufe erleichtern

var list = result .Hits.Select(c => new Models.ESObject()

{

Id = c.Source .Id,


Title = c.Highlights == null ? c.Source.Title : c.Highlights.Keys.Contains("title") ? string.Join("", c.Highlights["title "].Highlights): c.Source.Title, //Der hervorgehobene Inhalt erscheint mehrmals in einem Datensatz

Content = c.Highlights == null ? c.Highlights.Keys.Contains("content") ? ["content"].Highlights): c.Source.Content, //Der hervorgehobene Inhalt, wie oft er in einem Datensatz vorkommt. Zeiten

Autor = c.Source.Author,

Nummer = c.Source.Number,

IsDisplay = c.Source.IsDisplay,

Tags = c.Source.Tags,

Kommentare = c.Source.Comments,

DateTime = c.Source.DateTime,

})

2. Einführung in die Abfrage von DSL

Zu klären. ..

Elasticsearch.net-Dokument

Dokumentvorgänge umfassen das Hinzufügen/Aktualisieren von Dokumenten und das teilweise Aktualisieren von Dokumenten, das Löschen von Dokumenten und entsprechende Stapelverarbeitungsdokumentmethoden.

1. Dokumente und Stapelvorgänge hinzufügen/aktualisieren

Einzelnes Dokument hinzufügen/aktualisieren


Client.Index(student);

Batch Dokumentation hinzufügen/aktualisieren

var list = new List();2 3 client.IndexMany(list);

2. Teilweise Aktualisierung des Einzeldokument- und Stapelvorgangs

Ein einzelnes Dokument teilweise aktualisieren

client.Update("002", upt => upt.Doc(new { Name = "wenli" }));

Batchdokumente teilweise aktualisieren

var ids = new List() { "002" };


var bulkQuest = new BulkRequest() { Operations = new List() };


foreach (var v in ids)

{

var operation = new BulkUpdateOperation(v);


operation.Doc = new { Name = "wenli" };


bulkQuest.Operations.Add(operation);

}


var result = client.Bulk(bulkQuest );


3. Dokumente und Stapelvorgänge löschen

Einzelnes Dokument löschen

client.Delete("001" );

Batch-Löschen von Dokumenten

var ids = new List() { "001", "002" };


var bulkQuest = new BulkRequest() { Operations = new List() };


foreach (var v in ids)

{

bulkQuest.Operations.Add(new BulkDeleteOperation(v));

}


var result = client.Bulk (bulkQuest);

Weitere Artikel zur Verwendung von ES in C# finden Sie auf der chinesischen PHP-Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie man mit Sonderfiguren in der C -Sprache umgeht Wie man mit Sonderfiguren in der C -Sprache umgeht Apr 03, 2025 pm 03:18 PM

In der C -Sprache werden Sonderzeichen durch Escape -Sequenzen verarbeitet, wie z. B.: \ n repräsentiert Linienbrüche. \ t bedeutet tab charakter. Verwenden Sie Escape -Sequenzen oder Zeichenkonstanten, um Sonderzeichen darzustellen, wie z. B. char c = '\ n'. Beachten Sie, dass der Backslash zweimal entkommen muss. Verschiedene Plattformen und Compiler haben möglicherweise unterschiedliche Fluchtsequenzen. Bitte wenden Sie sich an die Dokumentation.

Was ist die Rolle von CHAR in C -Saiten? Was ist die Rolle von CHAR in C -Saiten? Apr 03, 2025 pm 03:15 PM

In C wird der Zeichenentyp in Saiten verwendet: 1. Speichern Sie ein einzelnes Zeichen; 2. Verwenden Sie ein Array, um eine Zeichenfolge darzustellen und mit einem Null -Terminator zu enden. 3. Durch eine Saitenbetriebsfunktion arbeiten; 4. Lesen oder geben Sie eine Zeichenfolge von der Tastatur aus.

Der Unterschied zwischen char und wchar_t in der C -Sprache Der Unterschied zwischen char und wchar_t in der C -Sprache Apr 03, 2025 pm 03:09 PM

In der C -Sprache ist der Hauptunterschied zwischen char und wchar_t die Zeichencodierung: char verwendet ASCII oder erweitert ASCII, wchar_t Unicode; char nimmt 1-2 Bytes auf, wchar_t nimmt 2-4 Bytes auf; char ist für englischen Text geeignet. Wchar_t ist für mehrsprachige Text geeignet. char ist weithin unterstützt, wchar_t hängt davon ab, ob der Compiler und das Betriebssystem Unicode unterstützen. char ist in der Charakterbereich begrenzt, WCHAR_T hat einen größeren Charakterbereich und spezielle Funktionen werden für arithmetische Operationen verwendet.

Wie man verschiedene Symbole in der C -Sprache verwendet Wie man verschiedene Symbole in der C -Sprache verwendet Apr 03, 2025 pm 04:48 PM

Die Nutzungsmethoden von Symbolen in der C-Sprachabdeckung Arithmetik, Zuordnung, Bedingungen, Logik, Bitoperatoren usw. werden für grundlegende mathematische Operationen verwendet, Zuordnungsoperatoren werden zur Zuordnung und Addition verwendet, Subtraktion, Multiplikationszuordnung und Abteilungszuweisung, Zustandsbetreiber werden für Unterschiede verwendet. Logische Operationen werden verwendet. Logische Operationen werden verwendet. Logische Operationen werden verwendet. Zeiger, Markierungen am Ende der Datei und nicht numerische Werte.

Der Unterschied zwischen Multithreading und asynchronem C# Der Unterschied zwischen Multithreading und asynchronem C# Apr 03, 2025 pm 02:57 PM

Der Unterschied zwischen Multithreading und Asynchron besteht darin, dass Multithreading gleichzeitig mehrere Threads ausführt, während asynchron Operationen ausführt, ohne den aktuellen Thread zu blockieren. Multithreading wird für rechenintensive Aufgaben verwendet, während asynchron für die Benutzerinteraktion verwendet wird. Der Vorteil des Multi-Threading besteht darin, die Rechenleistung zu verbessern, während der Vorteil von Asynchron nicht darin besteht, UI-Threads zu blockieren. Die Auswahl von Multithreading oder Asynchron ist von der Art der Aufgabe abhängt: Berechnungsintensive Aufgaben verwenden Multithreading, Aufgaben, die mit externen Ressourcen interagieren und die UI-Reaktionsfähigkeit asynchron verwenden müssen.

Wie man CHO in C -Sprache umwandelt Wie man CHO in C -Sprache umwandelt Apr 03, 2025 pm 03:21 PM

In der C -Sprache kann die char -Typ -Konvertierung direkt in einen anderen Typ konvertiert werden, wenn: Casting: Verwenden von Casting -Zeichen. Automatische Konvertierung des Typs: Wenn ein Datentyp einen anderen Werttyp berücksichtigen kann, wandelt der Compiler diese automatisch um.

Was ist die Funktion der C -Sprachsumme? Was ist die Funktion der C -Sprachsumme? Apr 03, 2025 pm 02:21 PM

Es gibt keine integrierte Summenfunktion in der C-Sprache, daher muss sie selbst geschrieben werden. Die Summe kann erreicht werden, indem das Array durchquert und Elemente akkumulieren: Schleifenversion: Die Summe wird für die Schleifen- und Arraylänge berechnet. Zeigerversion: Verwenden Sie Zeiger, um auf Array-Elemente zu verweisen, und eine effiziente Summierung wird durch Selbststillstandszeiger erzielt. Dynamisch Array -Array -Version zuweisen: Zuordnen Sie Arrays dynamisch und verwalten Sie selbst den Speicher selbst, um sicherzustellen, dass der zugewiesene Speicher befreit wird, um Speicherlecks zu verhindern.

So verwenden Sie char Array in C -Sprache So verwenden Sie char Array in C -Sprache Apr 03, 2025 pm 03:24 PM

Das Char -Array speichert Zeichensequenzen in der C -Sprache und wird als char Array_name [Größe] deklariert. Das Zugriffselement wird durch den Einweisoperator weitergeleitet, und das Element endet mit dem Null -Terminator '\ 0', der den Endpunkt der Zeichenfolge darstellt. Die C -Sprache bietet eine Vielzahl von String -Manipulationsfunktionen wie Strlen (), Strcpy (), Strcat () und strcmp ().

See all articles