Java 8+のために実装されたシンプルなクロスダタストアフルテキスト検索言語
フルテキスト検索は、最新のアプリケーションの重要な機能です。ただし、異なるデータストアは、フルテキスト検索を実行するために異なる構文を公開します。これらの構文の多くはユーザーフレンドリーではありません。一部のデータストアでは、フルテキスト検索機能をまったく公開していません!これにより、開発者が一貫したユーザー向けの検索エクスペリエンスを公開することが困難になります。 Liteceneは、Luceneの構文に基づいた馴染みのある標準クエリ言語であり、BigQueryのような人気のあるデータストアへのトランスピーラーとの標準クエリ言語です。これにより、開発者はアプリケーションデータストアのフルテキスト検索機能を最大限に活用しながら、ユーザーに一貫したユーザーフレンドリーな検索構文を簡単に公開できます。
このセクションでは、一般的なLiteceneクエリ構文について説明します。異なるトランスピラーが同じクエリのテキスト検索を異なる方法で実装する場合があることに注意してください。このセクションでは、有効なクエリと一致の論理的定義を構成するものについて説明するだけです。各トランスピラーの実装は、関連するデータストアで有効なクエリがどのように一致するかを正確に文書化します。
例として、これはソーシャルメディアの投稿を特定するための優れたLiteceneクエリかもしれません。
(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は、用語、フレーズ、リスト、グループ、および、および、およびそうではない7つの検索条項タイプをサポートしています。
用語条項は、非白文字の文字の引用されていない文字列です。一致するドキュメントには、指定された用語が含まれている必要があります。以下はすべて有効なLitecene用語条項です。
helloworldwhat's#selfie@twitterhttps://www.example.com/this/is/a/hyperlink期間条項は、ワイルドカード( * )で終了する場合があり、プレフィックス検索を示します。この場合、一致するドキュメントには、指定されたプレフィックスの用語が含まれている必要があります。以下はすべて有効なLiteceneプレフィックス用語条項です。
developer*what's*https://www.example.com/*フレーズ句は、引用された文字列の文字列です。一致するドキュメントには、隣の指定された用語が含まれている必要があります。以下はすべて有効なLiteceneフレーズ条項です。
"hello, world!""The rain in Spain falls mainly on the plains.""super cool search"フレーズ句の用語は、ワイルドカード( * )で終了して、プレフィックス検索を示します。この場合、一致するドキュメントには、指定されたプレフィックスが互いに隣接する項を含める必要があります。以下はすべて、ワイルドカード用語の有効なLiteceneフレーズ条項です。
"It wa* the best of times""It was the wors* of times"フレーズ句の後に、すぐにチルド( ~ )と整数番号が続いて、近接検索を示します。この場合、一致するドキュメントには、指定された項が任意の順序で指定された項数内のすべての通常またはプレフィックス項を含める必要があります。近接性の長さは、少なくともフレーズの用語数でなければなりません。以下は、近接性のある有効なLiteceneフレーズ条項です。
"hello, world!"~8"It wa* the best of times"~10リスト条項は、Whitespaceで区切られた2つ以上の有効なLitecene検索条項です。一致するドキュメントは、指定された条項を任意の順序で一致させる必要があります。以下はすべて有効なLiteceneフレーズ条項です。
hello, world!The rain in Spain falls mainly on the plains.engineer* "developer* productivity"~8グループ条項は、括弧( )に囲まれた他の有効なリトセン検索条項です。一致するドキュメントは、含まれる句と一致する必要があります。以下はすべて有効なLiteceneグループ条項です。
(hello world)(engineer* "developer* productivity"~10)グループ条項は、主に複数のおよびまたは条項を含む複雑なクエリを明確にするために使用されます。
An and句は、有効なLitecene検索条項で、その後にキーワードが続きANDに別のLitecene検索条項が続きます。複数の条項AND条項は、同じ節と句に追加できます。一致するドキュメントは、指定されたすべての条項と一致する必要があります。以下はすべて有効なリテセンと条項です。
hello AND worldThe rain in Spain falls mainly on the plains AND "My Fair Lady"~8engineer* AND "developer productivity"~10または条項は、有効なLitecene検索条項で、その後にキーワードが続くOR別のLitecene検索条項が続きます。複数OR条項は、同じまたは句に追加できます。条項がインターリーブされる場合、およびANDはよりタイトにバインドします。グループ条項を使用して、クエリをより明確かつ理解しやすくすることができます。一致するドキュメントは、与えられた条項の少なくとも1つと一致する必要があります。以下はすべて有効なLiteceneまたは条項です。
hello OR world"My Fair Lady"~8 OR PygmalionNOT句は、別のLitecene検索条項が続くキーワードでNOTものです。一致するドキュメントは、指定された句と一致してはなりません。以下はすべて条項ではなく有効なリトセンです。
NOT helloNOT "hello, world!"NOT (engineer* AND "developer productivity"~10)一部のクエリバックエンドではNOTのみを含むクエリが許可されていません。
アプリケーションでLiteceneを使用する方法の例については、アプリケーションのデータストアのREADMEを参照してください。
新しいデータストアの統合には、Litecene Queryオブジェクトをデータストアのネイティブ構文に変換するクエリトランスピラーが2つあります。データストアで検索のためにテキストを準備する方法。これらの2つのコンポーネントは、正しい検索セマンティクスを実装するために連携する必要があります。
たとえば、BigQuery Data Storeの統合では、ASCIIラテンの文字と数字のみが検索されます。したがって、クエリは、SQL述語に変換する前に、検索されていない文字を適切に処理するためにポストプロセッシングされなければなりません。データストアのデータは、検索されていない文字を排除するために前処理されなければなりません。
新しいデータ統合バックエンドは、ヘルパーを実装して、提案されたクエリ分析パイプラインと、データの前処理に対する提案されたアプローチを構築する必要があります。
Liteceneは、次のパイプラインを実装して、データストア統合開発者が複雑な処理ルールを迅速かつ簡単に構築できるようにします。
Liteceneは、すべてのクエリテキストをコードポイントのシーケンスとして表示します。 CodePointStreamは、コードポイントの順序付けられたシーケンスです。 Litecene Coreには、次のコードポイントフィルターが含まれています。
SmartQuotesCodePointFilter 「Smart Quotes」を「ストレート引用」に変換するコードポイントフィルターは、あるコードポイントを別のコードポイントにマッピングできますが、コードポイントを追加または削除することはできません。
Liteceneはトークン化を使用してコードポイントをトークンに変換します。 TokenStreamは、トークンの順序付けられたシーケンスです。 Litecene Coreには、次のトークンフィルターが含まれています。
LetterNumberTokenFilterすべての非アルファニュメリック文字をWhitespaceに置き換えます。 Unicodeカテゴリの文字と数字は、英数字のテキストを定義するために使用されます。LowercaseTokenFilterすべてのテキストを小文字に変換します。NormalizeTokenFilterテキストでUnicode NFKD正規化を実行し、すべてのUnicodeマーク文字を削除します。PrintableAsciiTokenFilter 0x20-0x7Eではないすべての文字をWhitespaceに置き換えます。トークンフィルターは、トークンテキストに任意の変更を加えることができますが、トークンを追加または削除することはできません。
Liteceneは、 QueryPipelineを使用した任意のクエリ変換を可能にします。 Litecene Coreには、次のクエリパイプラインが含まれています。
SimplifyQueryFilterPipelineクエリを再構築して、「空虚な」用語(テキストなしの用語など)を削除し、ロジックを簡素化します(隣接するマージとクエリのマージ) Liteceneのロードマップはいつでもここから入手できます。フィードバックがある場合は、お気軽に開いたり、問題についてコメントしてください!