コンテンツにスキップ

互換性

フェイクで通ったテストが何かを証明するのは、テストが見ている箇所で、フェイクが本物と同じように振る舞う場合だけです。このページは、osmemについてそれを判断するための一覧です。実装しているもの、近似しているもの、意図的にエラーにするもの。

未対応の機能はエラーを返します。多くは400 unsupported_operation_exceptionで、理由は「not supported by osmem」で終わります。それらしい空の結果を返すことはありません。レスポンスの形、ステータスコード、エラー種別はOpenSearch 2.xに合わせてあるので、クライアントライブラリは普段どおりにデコードできます。これまでに見つかった差異には、すべて回帰テストがあります。

インデックス。 設定・マッピング・エイリアス付きの作成、ワイルドカードと_allでの削除、存在確認、取得、_mappingの取得と更新(型の衝突はOpenSearchと同じく拒否)、_settings_stats、何もしない_refresh_flush_forcemerge_open_close_analyze_cat/indices_cat/aliases_cat/health_cat/count、クラスタのhealth・settings・state、スニッフィングするクライアント向けに実際のアドレスを返す_nodes。composableとlegacyのインデックステンプレートは、自動作成を含むインデックス作成時に適用されます。

ドキュメント。 自動id、op_typeif_seq_no/if_primary_term、external versionに対応した_doc_createdocdoc_as_upsertupsertdetect_noopに対応した_update_source_mget、アイテムごとのステータスを返す_bulk_delete_by_query、スクリプトなしの_update_by_query_reindex

マッピング。 text(analyzer、search_analyzer、マルチフィールド)、keyword(normalizer、ignore_above)、すべての数値型、boolean、名前付きフォーマット・Javaパターン・epochフォーマットに対応したdateとdate_nanos、geo_point、ip、objectとnested、null_valuecopy_toindex: falseenabled: falsedynamic: true/false/strict。動的マッピングはOpenSearchに従います。文字列は.keywordサブフィールド付きのtextになり、ISO形式の日付は検出され、整数はlong、小数はfloatになります。ドットを含むキーはオブジェクトに展開されます。

クエリ。 match(operator、minimum_should_match、fuzziness、zero_terms_query)、slop対応のmatch_phrase、match_phrase_prefix、match_bool_prefix、multi_match(best_fields、most_fields、cross_fields、phrase、phrase_prefix、bool_prefix、フィールドごとのブースト、ワイルドカードのフィールド名)、マッピングの型に従うterm、terms lookupを含むterms、数値・日付(日付演算、formattime_zone)・文字列に対するrange、exists、prefix、wildcard、regexp、fuzzy、ids、4種類の句とminimum_should_matchに対応したbool、constant_score、dis_max、query_stringとsimple_query_string、geo_distance、geo_bounding_box、wrapper。

検索。 10,000件のウィンドウまでのfrom/size、フィールドによるソート(order、missing、mode、unmapped_type、format)、_score_doc_idでのソート、欠損した数値や日付にOpenSearchと同じ番兵値を使うsearch_after、scroll、point in time、_sourceのフィルタリング、fieldsdocvalue_fieldsversionseq_no_primary_termtrack_total_hitstrack_scoresmin_scorepost_filtercollapse、ハイライト、_count_msearchfilter_pathprettyrest_total_hits_as_int、gzipで圧縮されたリクエストボディ。

集計。 terms(size、件数・キー・サブ集計による並べ替え、min_doc_count、missing、include/exclude)、multi_terms、range、date_range、histogram、date_histogram(calendarとfixedの間隔、time_zone、offset、format、extended_bounds、空バケットの補完)、filter、filters、missing、global、そのまま通すだけのnestedとreverse_nested、after付きのcomposite、avg、sum、min、max、value_count、stats、extended_stats、cardinality、percentiles、percentile_ranks、top_hits、weighted_avg、median_absolute_deviation。パイプライン集計はcumulative_sum、derivative、bucket_sort、avg/sum/min/max/stats_bucket。サブ集計は入れ子にできます。

解析。 standard、simple、whitespace、keyword、stop、patternと、bleveの言語別アナライザ。トークナイザ(standard、whitespace、keyword、letter、pattern、ngram、edge_ngram、char_group、uax_url_email)、トークンフィルタ(lowercase、asciifolding、stop、ngram、edge_ngram、shingle、stemmer、snowball、porter_stem、truncate、length、unique、reverse、cjk_bigram、cjk_width)、文字フィルタ(html_strip、pattern_replace)から組み立てるカスタムアナライザ。normalizer。日本語サポートを有効にすれば、kuromojiアナライザ、モードとユーザー辞書に対応したkuromoji_tokenizer、kuromoji_baseform、kuromoji_part_of_speech、cjk_width、ja_stop、kuromoji_stemmer、kuromoji_readingform。

  • スコア。 bleveのBM25は、Luceneのものとは違います。普通のクエリなら順位は一致しますが、_scoreの値と同点の扱いは一致しません。フィルタは、OpenSearchと同じくスコア計算から除外されます。
  • nestedドキュメントはフラットに扱われます。nestedクエリは、配列内のどこかでフィールドが一致すれば、objectフィールドと同じようにヒットします。
  • アナライザ。 言語別アナライザは、bleveのステマーとストップワードを使います。日本語の分かち書きはkuromojiではなく、IPA辞書を使うkagomeによるもので、未知語では結果が異なることがあります。韓国語と中国語はCJKのbigramです。カスタムアナライザ内の未対応フィルタは、警告を出して読み飛ばします。
  • 厳密さ。 OpenSearchはcardinalityとpercentilesを近似値で返しますが、osmemは厳密な値を返します。近似値を前提にしたアサーションは、結果が変わります。
  • リフレッシュ。 書き込みは即座に見えます。書き込みからリフレッシュまでの間の状態を、テストで観測することはできません。

あらゆる形のPainless(scriptscript_scorefunction_scoreの関数、スクリプトによる更新、bucket_scriptbucket_selector)、サジェスター、kNNとニューラル検索、パーコレーター、joinフィールド、spanクエリ、geo shape、significant_termsなどの統計的な集計、ingestパイプライン、セキュリティ、スナップショット、スタブを超えるノードとシャードの管理、max_result_windowの変更。

  • opensearch-go v4はCIでテストしています。go-elasticsearch v8には、確認対象のX-Elastic-Productヘッダを返します。
  • olivere/elasticは/_nodesをスニッフィングします。osmemはそこに実際のlistenアドレスを返します。
  • Elasticsearch 7のバージョン文字列を要求するクライアントには、クラスタ設定compatibility.override_main_response_version: trueを設定してください。GET /が7.10.2を返すようになります。
  • エラーは{"error": {"type", "reason", "root_cause"}, "status"}の形です。未知のURLには文字列のerrorを持つ400を、誤ったメソッドには405を、OpenSearchと同じく返します。