Aerospikeで新しくなった。 Mysqlのようなテキストの一部で検索する簡単な方法はありますか?例:AerospikeのLIKEクエリ演算子を実装する
select * from test where column like '%hello%';
この一般的な操作がサポートされていない場合は、NoSQLデータベースに移行するのが困難です。おかげさまで
Aerospikeで新しくなった。 Mysqlのようなテキストの一部で検索する簡単な方法はありますか?例:AerospikeのLIKEクエリ演算子を実装する
select * from test where column like '%hello%';
この一般的な操作がサポートされていない場合は、NoSQLデータベースに移行するのが困難です。おかげさまで
Predicate filteringをrelease 3.12に加えた。 JavaクライアントのPredExpクラスのstringRegexメソッドを使用して、LIKEに相当するメソッドを実装できます。述語フィルタは現在、C,C#およびGoクライアントにも存在します。
Statement stmt = new Statement();
stmt.setNamespace(params.namespace);
stmt.setSetName(params.set);
stmt.setFilter(Filter.range(binName, begin, end));
stmt.setPredExp(
PredExp.stringBin("bin3"),
PredExp.stringValue("prefix.*suffix"),
PredExp.stringRegex(RegexFlag.ICASE | RegexFlag.NEWLINE)
);
あなたはまだ述語フィルタリングをサポートしていない言語のクライアントを使用している場合は、あなたがに接続stream UDFでこれを実装したい:エアロスパイクJavaクライアントでこのexample
は似た何かを示していスキャンまたは照会。たとえば、Pythonクライアントでは、述語の有無にかかわらずクラスaerospike.Queryのインスタンスを作成し、aerospike.Query.apply()メソッドを呼び出します。
理想的には、セット全体をスキャンするのではなく、バケット処理と述語を使用して検索の絞り込みを加速します。たとえば、最初の文字を保持するstartswith binを作成し、それを見つけるために述部を使用してから、ストリームUDFで一致したレコードを送信することができます。ただ、LIKEはインデックスを使用できないため、RDBMS上ではひどく遅い操作であることにも注意してください。
一般的な操作は、少なくとも適切な時間内に結果を返すことを期待している場合は、RDBMSで使用しないでください。 LIKEは索引を使用できないため、表全体をスキャンする必要があります。 Aerospikeの非常に大きなセットでのスキャンは、同様のサイズのテーブルのスキャンよりもはるかに高速です。 –
あなたの答えに感謝rbotzer。 それはあなたが提案する良いテクニックです。私はまだテキストを検索する必要があります。 私は単語や単語の一部を検索するアプリケーションを持っています。 私はMongoDbがこの目的にはうまく合っていて、NoSQLデータベースであると思います。 よろしくお願いいたします。 – karrtojal