Eine einfache Cross-Data-Speicher-Volltext-Suchsprache, die für Java 8+ implementiert ist
Die Volltext-Suche ist eine wichtige Funktion moderner Anwendungen. Verschiedene Datenspeicher enthüllen jedoch verschiedene Syntaxen für die Durchführung der Volltext-Suche, und viele dieser Syntaxe sind nicht benutzerfreundlich. Einige Datenspeicher legen überhaupt keine Volltext-Suchfunktionen frei! Dies erschwert es Entwicklern, ein konsistentes, benutzergerichtetes Sucherlebnis aufzudecken. Litecene ist eine vertraute Standard-Abfragesprache, die auf Lucene-Syntax mit Transpilern zu beliebten Datengeschäften wie BigQuery basiert, die es Entwicklern erleichtert, den Benutzern eine konsistente, benutzerfreundliche Suchsyntax aufzuzeigen und gleichzeitig die Suchfunktionen des Anwendungsdatenspeichers für den größten Teil des Textes zu machen.
Dieser Abschnitt beschreibt die gemeinsame Litecene -Abfrage -Syntax. Beachten Sie, dass verschiedene Transpiler die Textsuche für dieselbe Abfrage unterschiedlich implementieren können. In diesem Abschnitt wird lediglich beschrieben, was eine gültige Abfrage und die logische Definition einer Übereinstimmung ausmacht. Jede Transpiler -Implementierung dokumentiert genau, wie gültige Abfragen im zugehörigen Datenspeicher übereinstimmen.
Beispielsweise könnte dies eine gute Litecene -Abfrage sein, um Social -Media -Beiträge zu identifizieren, in denen die allgemeinen Möglichkeiten erwähnt werden, wie Menschen ihre Smartphones benutzen:
(smartphone OR "smart phone" OR iphone OR "apple phone" OR android OR "google phone" OR "windows phone" OR "phone app"~8) AND (call OR dial OR app OR surf OR browse OR camera OR picture OR pic OR selfie)
Litecene unterstützt sieben Suchklauseltypen: Begriff, Ausdruck, Liste, Gruppen und, oder, und nicht.
Eine Begriffsklausel ist eine nicht geeignete Reihe von Nicht-Whitespace-Zeichen. Ein passendes Dokument muss den angegebenen Begriff enthalten. Im Folgenden sind alle gültigen Litecene -Begriffsklauseln aufgeführt:
helloworldwhat's#selfie@twitterhttps://www.example.com/this/is/a/hyperlink Eine Begriffsklausel kann auch mit einer Wildcard ( * ) enden, um eine Präfix -Suche anzugeben. In diesem Fall muss ein übereinstimmendes Dokument einen Begriff mit dem angegebenen Präfix enthalten. Im Folgenden sind alle gültigen Litecene -Präfix -Begriffsklauseln aufgeführt:
developer*what's*https://www.example.com/*Eine Phrasenklausel ist eine zitierte Zeichenfolge. Ein passendes Dokument muss die angegebenen Begriffe nebeneinander enthalten. Im Folgenden sind alle gültigen Litecene -Phrasen -Klauseln aufgeführt:
"hello, world!""The rain in Spain falls mainly on the plains.""super cool search" Ein Begriff in einer Phrase -Klausel kann mit einer Wildcard ( * ) enden, um eine Präfix -Suche anzugeben. In diesem Fall muss ein übereinstimmendes Dokument die angegebenen Begriffe mit den angegebenen Präfixen nebeneinander enthalten. Im Folgenden sind alle gültigen Litecene -Phrasenklauseln mit Wildcard -Begriffen aufgeführt:
"It wa* the best of times""It was the wors* of times" Eine Phrasenklausel kann sofort von einer Tilde ( ~ ) und einer Ganzzahlnummer befolgt werden, um eine Näherungssuche anzuzeigen. In diesem Fall muss ein übereinstimmendes Dokument alle angegebenen regulären oder Präfixbegriffe innerhalb der angegebenen Anzahl der Bedingungen in jeder Reihenfolge enthalten. Die Näherungslänge muss mindestens die Anzahl der Begriffe in der Phrase sein. Im Folgenden sind gültige Litecene -Phrasenklauseln mit der Nähe:
"hello, world!"~8"It wa* the best of times"~10Eine Listenklausel sind zwei oder mehr gültige Litecene -Suchklauseln, die durch Whitespace getrennt sind. Ein passendes Dokument muss den angegebenen Klauseln in beliebiger Reihenfolge übereinstimmen. Im Folgenden sind alle gültigen Litecene -Phrasen -Klauseln aufgeführt:
hello, world!The rain in Spain falls mainly on the plains.engineer* "developer* productivity"~8 Eine Gruppenklausel ist eine andere gültige Litcen -Suchklausel, die von Klammern umgeben ist ( ) . Ein passendes Dokument muss mit der enthaltenen Klausel übereinstimmen. Im Folgenden sind alle gültigen Klauseln der Litecene -Gruppe:
(hello world)(engineer* "developer* productivity"~10)Gruppenklauseln werden hauptsächlich verwendet, um komplexe Abfragen zu klären, die mehrere und / und und und / und Klauseln enthalten.
Eine und Klausel ist eine gültige Litecene -Suchklausel, gefolgt vom Schlüsselwort AND einer weiteren Litecene -Suchklausel. Mehrere AND Klauseln können an die gleiche und Klausel angehängt werden. Ein passendes Dokument muss mit allen angegebenen Klauseln übereinstimmen. Das Folgende sind alle gültige Litecene und Klauseln:
hello AND worldThe rain in Spain falls mainly on the plains AND "My Fair Lady"~8engineer* AND "developer productivity"~10 Eine oder Klausel ist eine gültige Litecene -Suchklausel, gefolgt vom Schlüsselwort OR einer anderen Litecene -Suchklausel. Mehrere OR Klauseln können an die gleiche oder Klausel angehängt werden. Wenn und und oder Klauseln verschachtelt sind, bindet der AND Operator enger. Eine Gruppenklausel kann verwendet werden, um eine Abfrage klarer und leichter zu verstehen. Ein passendes Dokument muss mindestens einer der angegebenen Klauseln übereinstimmen. Das Folgende sind alle gültige Litecene oder Klauseln:
hello OR world"My Fair Lady"~8 OR Pygmalion Eine Nichtklausel ist das NOT Schlüsselwort, gefolgt von einer anderen Litecene -Suchklausel. Ein passendes Dokument darf nicht mit der angegebenen Klausel übereinstimmen. Das Folgende sind alle gültige Litcene, nicht Klauseln:
NOT helloNOT "hello, world!"NOT (engineer* AND "developer productivity"~10) Einige Abfrage -Backends erlauben keine Abfrage, die nur NOT Klauseln enthält.
Beispiele für die Verwendung von Litecene in Ihrer Anwendung finden Sie im Datenspeicher Ihrer Anwendung im ReadMe.
Eine neue Datenspeicherintegration enthält zwei Teile: eine Abfragetranspiler, die ein Litecene Query in die native Syntax des Datenspeichers umwandelt; und eine Methode, um Text im Datenspeicher für die Suche vorzubereiten. Diese beiden Komponenten müssen zusammenarbeiten, um die korrekte Suchsemantik zu implementieren.
Beispielsweise sucht die Integration von BigQuery Data Store nur ASCII -Latin -Buchstaben und -zahlen. Daher muss die Abfrage postbenannt werden, um nicht gesuchte Zeichen entsprechend zu verarbeiten, bevor sie in ein SQL-Prädikat konvertiert werden kann, und die Daten im Datenspeicher müssen vorverarbeitet werden, um nicht gesuchte Zeichen zu beseitigen, und beide verarbeitet müssen so, dass sie miteinander übereinstimmen.
Eine neue Datenintegrations -Backend muss einen Helfer implementieren, um eine vorgeschlagene Abfrageanalysepipeline und einen vorgeschlagenen Ansatz zur Datenvorverarbeitung zu erstellen.
Litecene implementiert die folgenden Pipelines, mit denen die Integrationsentwickler von Datenspeichern schnell und einfach komplexe Verarbeitungsregeln erstellen können.
Litecene betrachtet alle Abfragetext als Abfolge von Codepunkten. Der CodePointStream ist eine geordnete Abfolge von Codepunkten. Litecene Core enthält die folgenden Codepunktfilter:
SmartQuotesCodePointFilter - konvertiert "intelligente Zitate" in "Straight Quotes"Codepunktfilter können einen Codepunkt zu einem anderen zuordnen, aber Codepunkte nicht hinzufügen oder entfernen.
Litecene verwendet Tokenisierung, um Codepunkte in Token umzuwandeln. Der TokenStream ist eine geordnete Reihenfolge von Token. Litecene Core enthält die folgenden Token -Filter:
LetterNumberTokenFilter -ersetzt alle nicht-alphanumerischen Zeichen durch Whitespace. Mit dem Buch und der Nummer der Unicode -Kategorien werden alphanumerische Text definiert.LowercaseTokenFilter - Umwandelt alle Text in Kleinbuchstaben.NormalizeTokenFilter - führt eine Unicode -NFKD -Normalisierung im Text durch und entfernt alle Unicode -Markzeichen.PrintableAsciiTokenFilter -ersetzt alle Zeichen, die nicht in 0x20-0x7E durch Whitespace sind.Token -Filter können willkürliche Änderungen am Token -Text vornehmen, jedoch keine Token hinzufügen oder entfernen.
LITECENE ermöglicht beliebige Abfragen -Transformationen mithilfe einer QueryPipeline . Litecene Core enthält die folgenden Abfragepipelines:
SimplifyQueryFilterPipeline - Umstrukturierungen einer Abfrage zum Entfernen von "leeren" Begriffen (z. B. Begriffe ohne Text) und vereinfachen Sie die Logik (z. B. angrenzend und Abfragen) Die Roadmap von Litecene ist hier immer verfügbar. Bitte zögern Sie nicht, Probleme zu öffnen oder zu kommentieren, wenn Sie Feedback haben!