Die IreSearch -Bibliothek soll als eigenständiger Index behandelt werden, der in der Lage ist, einzelne Werte wörtlich zu indizieren und zu speichern. Indexierte Daten werden nach der Basis pro Version/pro Revision behandelt, dh vorhandene Datenversion/Revision wird nie geändert und Aktualisierungen/Umzüge werden als neue Versionen/Überarbeitungen der genannten Daten behandelt. Dies ermöglicht triviale Multi-Thread-Lese-/Schreibvorgänge im Index. Der Index enthält seine Datenverarbeitungsfunktion über eine Multi-Thread-Autor-Schnittstelle, die jede Dokumentabstraktion als Sammlung von Feldern für Index und/oder Speicher behandelt. Der Index enthält seine Datenabnahmefunktionalität über 'Reader' -Schnittstelle, die Datensätze aus einem Index zurückgibt, das einer bestimmten Abfrage entspricht. Bei den Abfragen selbst handelt es sich um Abfragebäume, die direkt mit den in der API verfügbaren Abfragebausträgern gebaut wurden. Die Abfrageinfrastruktur bietet die Möglichkeit, das Ergebnis zu bestellen, das von einem oder mehreren Ranking-/Bewertungsimplementierungen festgelegt wird. Die Ranking-/Scoring-Implementierungslogik ist während der Laufzeit nach Bedarf Plugin-basiert und faul initialisiert, sodass die kundenspezifische Ranking-/Scoring-Logik hinzugefügt werden kann, ohne dass die IreSearch-Bibliothek sogar neu kompiliert werden muss.
Ein Index besteht aus mehreren unabhängigen Teilen, genannt Segmenten und Indexmetadaten. Index Metadaten speichert Informationen zu aktiven Indexsegmenten für die bestimmte Indexversion/Revision. Jedes Indexsegment ist selbst ein Index und besteht aus den folgenden logischen Komponenten:
Lesen/Schreibzugriff auf die Komponenten, die über Plugin-basierte Formate getragen werden. Der Index kann Segmente enthalten, die mit verschiedenen Formaten erstellt wurden.
Ein Datenbankdatensatz wird als Abstraktion als Dokument dargestellt. Ein Dokument ist tatsächlich eine Sammlung von indizierten/gespeicherten Feldern. Um verarbeitet zu werden, sollte jedes Feld mindestens IndexedField oder StoredField Konzept erfüllen.
Damit Typ T IndexedField wird, müssen die folgenden Bedingungen für ein Objekt m von Typ T erfüllt werden:
| Ausdruck | Erfordert | Effekte |
|---|---|---|
m.name() | Der Ausgangstyp muss in irs::string_ref konvertierbar sein | Ein Wert verwendet als Schlüsselname. |
m.get_tokens() | Der Ausgangstyp muss in irs::token_stream* konvertierbar sein | Ein Token -Stream verwendet für die Bevölkerung in der Invert -Prozedur. Wenn der Wert nullptr Feld ist, wird als nicht iNdexed behandelt. |
m.index_features() | Der Ausgangstyp muss implizit in irs::IndexFeatures konvertierbar sein | Eine Reihe von Funktionen, die während der Indexierung zur Bewertung angefordert wurden. ZB es kann Anfrage von Bearbeitungspositionen und Frequenzen enthalten. Später können die ausgewerteten Informationen während der Abfrage und Bewertung verwendet werden. |
m.features() | Der Ausgangstyp muss um const irs::flags& wandelbar sein. | Eine Reihe von Benutzern, die mit einem Feld zugeordnet sind. ZB es kann Anfrage von Speichern von Feldnormen enthalten. Später können die gespeicherten Informationen während der Abfrage und Bewertung verwendet werden. |
Damit Typ T StoredField werden kann, müssen die folgenden Bedingungen für ein Objekt m von Typ T erfüllt werden:
| Ausdruck | Erfordert | Effekte |
|---|---|---|
m.name() | Der Ausgangstyp muss in irs::string_ref konvertierbar sein | Ein Wert verwendet als Schlüsselname. |
m.write(irs::data_output& out) | Der Ausgangstyp muss nach bool konvertierbar sein. | Man kann willkürliche Daten schreiben, die nach out bezeichnet werden, um den schriftlichen Wert später mit der Index_reader -API abzurufen. Wenn nichts geschrieben hat, aber der zurückgegebene Wert true , wird der gespeicherte Wert als Flagge behandelt. Wenn der zurückgegebene Wert false ist, wird nichts gespeichert, selbst wenn etwas geschrieben wurde, um den Stream out . |
Eine Datenspeicherabstraktion, die entweder Daten im Speicher oder im Dateisystem speichern kann, je nachdem, welche Implementierung instanziiert wird. Ein Verzeichnis speichert mindestens alle aktuell in den Verwendungszwecke Indexdatenversionen/Revisionen. Für den Fall, in dem es keine aktiven Benutzer des Verzeichnisses gibt, wird mindestens die letzte Datenversion/Revision gespeichert. Nicht verwendete Datenversionen/Revisionen können über den Directory_Cleaner entfernt werden. Eine einzelne Version/Überarbeitung des Index besteht aus einer oder mehreren zugeordneten Segmenten und möglicherweise geteilt mit der genannten Version/Revision.
Ein einzelnes Objekt pro Verzeichnis, das zum Indizierungsdaten verwendet wird. Die Daten können pro-dokumentisch oder von einem anderen Leser für die Merge-Funktionalität des Verzeichnisverzeichnisses in indiziert werden. Jeder commit() eines Schriftstellers erstellt eine neue Version/Überarbeitung der Ansicht der Daten im entsprechenden Verzeichnis. Zusätzlich bietet die Schnittstelle auch Funktionen für Verzeichnisse Defragmentierung, um die Kompakte mehrerer kleinerer Versions-/Revisionssegmente in größere kompaktere Darstellungen zu ermöglichen. Ein Schriftsteller unterstützt zweiphasige Transaktionen über begin() / commit() / rollback() -Methoden.
Eine wiederverwendbare/aktualisierbare Ansicht eines Index zu einem bestimmten Zeitpunkt. Mehrere Leser können das gleiche Verzeichnis verwenden und auf verschiedene Versionen/Überarbeitungen von Daten in dem genannten Verzeichnis verweisen.
v3.10 oder höher
v1.57.0 oder höher (nur Header)
BOOST_ROOT= < path-to > /boost_1_57_0make
make installoder Punkt LZ4_ROOT im Quellverzeichnis, um sie zusammen mit IreSearch zu erstellen
Wenn Sie IRESEarch mit/mt add_definitions ("/mtd") zum Ende von cmake_unofficial/cmakelists.txt hinzufügen, ignoriert CMAKE das Argument der Befehlszeilen -dcmake_c_flags =/mtd
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX= < install-path > -DBUILD_STATIC_LIBS=on -g " Visual studio 17 " -Ax64 ../contrib/cmake_unofficial
cmake --build .
cmake --build . --target installoder Punkt LZ4_ROOT im Quellverzeichnis, um sie zusammen mit IreSearch zu erstellen
LZ4_ROOT= < install-path >Win32 -Binärdateien auch erhältlich in:
v53 oder höher
./configure --disable-samples --disable-tests --enable-static --srcdir= " $( pwd ) " --prefix= < install-path > --exec-prefix= < install-path >
make installoder punkte icu_root im Quellverzeichnis, um zusammen mit IreSearch oder über den Paketmanager des Verteilungen zu erstellen: libicu
Suchen Sie nach Link: "ICU4C -Binärdateien"
ICU_ROOT= < path-to-icu >Die benutzerdefinierten cmakelists.txt sollen mit Snowball v2.0.0 und späteren Versionen verwendet werden. Zumindest wurde es getestet, an Commit 53739A805CFA6C77FF8496DC711DC1C106D987C1 zu arbeiten
git clone https://github.com/snowballstem/snowball.git
mkdir build && cd build
cmake -DENABLE_STATIC=OFF -DNO_SHARED=OFF -g " Unix Makefiles " ..
cmake --build .
cmake -DENABLE_STATIC=OFF -DNO_SHARED=ON -g " Unix Makefiles " ..
cmake --build .oder Punkt Snowball_Root im Quellverzeichnis zu erstellen, um zusammen mit IreSearch oder über den Paketmanager des Verteilungen zu erstellen: Libstemmer
Der benutzerdefinierte cmakelists.txt basiert auf Revision 5137019D68BEFD633CE8B1CD48065F41E77ED43E später
git clone https://github.com/snowballstem/snowball.git
git reset --hard adc028f3ae646623bda2f99191fe9dc3287a909b
mkdir build && cd build
set PATH=%PATH% ; < path-to > /build/Debug
cmake -DENABLE_STATIC=OFF -DNO_SHARED=OFF -g " Visual studio 12 " -Ax64 ..
cmake --build .
cmake -DENABLE_STATIC=OFF -DNO_SHARED=ON -g " Visual studio 12 " -Ax64 ..
cmake --build .oder punktieren
Für statische Builds:
- in MSVC offen: bauen/snowball.sln
- SET: Stemmer -> Eigenschaften -> Konfigurationseigenschaften -> C /C ++ -> Codegenerierung -> Laufzeitbibliothek = /mtd
- Build -> Build -Lösung
SNOWBALL_ROOT= < path-to-snowball >Punkt vpack_root im Quellverzeichnis, um sie zusammen mit IreSearch zu erstellen
mkdir build && cd build
cmake ..
makeoder Punkt gtest_root im Quellverzeichnis, um sie zusammen mit IreSearch zu erstellen
mkdir build && cd build
cmake -g " Visual studio 12 " -Ax64 -Dgtest_force_shared_crt=ON -DCMAKE_DEBUG_POSTFIX= " " ..
cmake --build .
mv Debug ../liboder Punkt gtest_root im Quellverzeichnis, um sie zusammen mit IreSearch zu erstellen
GTEST_ROOT= < path-to-gtest >Laden Sie eine beliebige Anzahl von Listen von Stoppwörtern herunter, z.
IRESEARCH_TEXT_STOPWORD_PATH= < path-to-stopword-lists >Wenn die variable iresearch_text_stopword_path nicht festgelegt bleibt, werden Unterverzeichnisse der Gebietsschema angegeben, die sich im aktuellen Arbeitsverzeichnis befinden
git clone < IResearch code repository > /iresearch.git iresearch
cd iresearch
mkdir build && cd buildErstellen Sie die Build -Datei <*nix>:
cmake -DCMAKE_BUILD_TYPE=[Debug | Release | Coverage] -g " Unix Makefiles " ..
- Wenn einige Bibliotheken vom Build nicht gefunden werden, setzen Sie die erforderliche Umgebung> Variablen (z. B. boost_root, boost_librarydir, lz4_root, openFST_ROOT, GTEST_ROOT)
- Wenn ICU oder Schneeball von den Verteilungspfaden nicht gefunden werden, sind möglicherweise die folgenden zusätzlichen> Umgebungsvariablen erforderlich:> ICU_ROOT_SUFFIX = x86_64-linux-gnu snowball_root_suffix = x86_64-linux-gnu
Build -Datei erstellen (Win32):
cmake -g " Visual studio 12 " -Ax64 ..Wenn einige Bibliotheken nicht vom Build gefunden werden, stellen Sie die erforderlichen Umgebungsvariablen fest (z. B. boost_root, boost_librarydir, lz4_root, openFST_ROOT, GTEST_ROOT)
Stellen Sie die Build -Kennung für diesen Build fest (optional)
echo " <build_identifier> " > BUILD_IDENTIFIERBibliothek erstellen:
cmake --build .Testbibliothek:
cmake --build . --target iresearch-checkBibliothek installieren:
cmake --build . --target installCodeabdeckung:
cmake --build . --target iresearch-coverageEs gibt eine Python -Wrapper für IreSearch. Wrapper erhält Zugriff auf das Objekt des Verzeichnislesers. Für Nutzungsbeispiel siehe /Python /Skripte
Der Bau von Pyresearch -Swig -Generator sollte verfügbar sein. Add -duse_pyresearch = on zu CMake -Befehlszeile, um Pyresearch -Ziele zu generieren
Führen Sie die Zielpyresearch-Installation aus
Eine Version von ICU -Installateuren scheint nicht alle ICU -DLLs durch Pfadumweltvariable zur Verfügung zu stellen. Man kann eine manuelle Einstellung erforderlich sein.
Die gemeinsame Version von Libiresarch wird verwendet. Installieren Sie IreSearch vor dem Ausführen von Pyresearch.
Externe Abhängigkeiten von Drittanbietern müssen der IreSearch -Bibliothek separat zur Verfügung gestellt werden. Sie können entweder über das Verteilungspaketverwaltungssystem installiert oder aus der Quelle erstellt werden und die entsprechenden Umgebungsvariablen entsprechend festgelegt werden.
V1.57.0 oder höher (Laien -System -Thread), das für die Funktionalität verwendet wird, die in der STL nicht verfügbar ist (ohne auf der Intensivstation verfügbare Funktionalität)
Wird zur Komprimierung/Dekompression von Byte/String -Daten verwendet
Wird von Analysatoren zum Parsen, Transformieren und Tokenising -String -Daten verwendet
Wird von Analysatoren zum Berechnen von Wortstämmen (dh Wurzeln) verwendet, um flexiblere Matching -Matching von Wörtern aus Sprachen, die nicht von 'Snowball' unterstützt werden, wörtlich gemacht werden
Wird zum Schreiben von Tests für die IreSearch -Bibliothek verwendet
Wird für die JSON -Serialisierung/Deserialisierung verwendet
verwendet von Analyse :: text_analyzer zum Filtern von Geräuschwörtern, die sich nicht auf Text auswirken sollten, z. https://code.google.com/p/stop-words/ oder erstellen Sie eine benutzerdefinierte lachspezifische Liste von Stoppwörtern. Platzieren Sie die Dateien mit Stoppwörtern (UTF8 mit einem Wort pro Zeile codiert, jeder Text nach der ersten Whitespace ignoriert), in der Verzeichnis, die der Sprache entspricht (mehrere Dateien pro Sprache, werden als einzelne Liste als einzelne Liste entsprechend ausgeführt).
| Filter | Beschreibung |
|---|---|
| IRS :: By_edit_distance | zur Filterung von Werten basierend auf Levenshtein -Entfernung |
| IRS :: By_Granular_Range | Für eine schnellere Filterung numerischer Werte innerhalb eines bestimmten Bereichs mit der Möglichkeit, offene/geschlossene Bereiche anzugeben |
| IRS :: BY_NGRAM_SIMILION | Zur Filterung von Werten basierend auf dem NGRAM -Modell |
| IRS :: By_Phrase | Für die sensitive Filterung von Werten mit wör- und sensitiven Werten mit der Möglichkeit, ausgewählte Positionen zu überspringen |
| IRS :: BY_PREFIX | Zur Filterung der exakten Wertpräfixe |
| IRS :: By_Range | zur Filterung von Werten innerhalb eines bestimmten Bereichs mit der Möglichkeit, offene/geschlossene Bereiche anzugeben |
| IRS :: By_Same_Position | Für die sensitive Filterung der exakten Werte für Termeinspannungsorder-Ordnung |
| IRS :: By_term | Zur Filterung der genauen Werte |
| IRS :: BY_TERMS | Zur Filterung der genauen Werte durch eine Reihe bestimmter Begriffe |
| IRS :: By_WILDCARD | Zur Filterung von Werten basierend auf dem Matching -Muster |
| IRS :: BYNESTFILTER | Zur Filterung von Dokumenten basierend auf dem Matching-Muster auf den Unterdokumenten |
| IRS :: und | Boolesche Konjunktion mehrerer Filter, die die Dokumentenränge/-werte nach Bedarf beeinflussen |
| IRS :: oder | Boolesche Disjunktion mehrerer Filter, die die Dokumentenränge/-werte nach Bedarf beeinflussen (einschließlich "Mindestübereinstimmungsfunktionalität)) |
| IRS :: Nicht | Boolesche Negation mehrerer Filter |
Copyright (C) 2017-2023 Arangodb GmbHH
Copyright (C) 2016-2017 EMC Corporation
Diese Software wird in der in der lizenz.md -Datei bereitgestellten APache 2.0 -Softwarelizenz bereitgestellt. Lizenzinformationen für Produkte von Drittanbietern, die von der IreSearch-Suchmaschine verwendet werden