仲間の開発者とのコミュニケーションを改善するために、語彙を磨き上げようとしています。'running%'
文字列内のどこからでも最初から文字列を検索する必要があるかどうかを議論しているサイトには、いくつかの場所があります'%running%
。
ファジーとは「run」、「runing」[sic]、「runed」[sic]という単語の形式を変更することを意味するため、中間検索を「ファジー」と呼んでいます。
文字列の先頭を検索し、文字列の中央を検索するための正しい用語は何ですか?
仲間の開発者とのコミュニケーションを改善するために、語彙を磨き上げようとしています。'running%'
文字列内のどこからでも最初から文字列を検索する必要があるかどうかを議論しているサイトには、いくつかの場所があります'%running%
。
ファジーとは「run」、「runing」[sic]、「runed」[sic]という単語の形式を変更することを意味するため、中間検索を「ファジー」と呼んでいます。
文字列の先頭を検索し、文字列の中央を検索するための正しい用語は何ですか?
回答:
これは「アンカーされていない検索パターン」と呼ばれ、SQLでは次のようになります。
foo LIKE '%bar%'
%
どちらか一方に欠けている場合、検索パターンはそれぞれ文字列の先頭または末尾に固定されると言われています。この専門用語は、正規表現の世界から来ています。
foo LIKE 'bar%'
「bar%
文字列の先頭に固定された検索パターン」と言うでしょう。
比較のために、PCREがで固定されている^
か、$
トークンと、それは次のようになります^bar
かbar$
。PCREではトークンによる明示的なアンカーが必要ですが、SQL LIKE
ステートメントは暗黙的にアンカーさ%
れ、「アンカーされていない検索パターン」を作成するには明示的に必要です。
補足として、PostgreSQLのようなものを使用して、これらのタイプの式にトライグラムをインデックス付けできpg_trgm
ます
私が最初に思い浮かぶのは、「un -Sargable」です。インデックス付きフィールドで特定の文字列または文字列の最初の部分を検索すると、検索できます。検索がワイルドカードで始まる場合、RDBMSはインデックス全体をスキャンする必要があります。これは、検索条件に一致する値が値セットのどこにでも現れる可能性があるためです。
電話帳を調べることを検討してください(あなたがそれらを覚えるのに十分な年齢の場合...)。「Dan:」で始まる姓の人を簡単に見つけることができます。Dに親指を立て、DAに進むと、DANのすべてが一緒になります。姓に文字列「ANIEL」が含まれる人を検索する場合は、すべてのページを読む必要があります(表をスキャンします)。
それはあなたの質問ではありませんが、ファジーの例は不正確です。
'run'
精度0.5でのファジー検索には「ran」、「rud」、その他多くの単語が含まれます。SQLはファジー検索をサポートしていません。Luceneなどの追加システムが必要です。'run%'
常に「runingて」と「ルーン文字が刻ま」を含むだろう、とあなたが区別できるから始まると含まれている('%run%'
@として「outrunning」を含むため)ソロモンRutzkyが示唆' run '
(または' run% '
「bla bla runing bla」や「bla runed bla bla」などの部分一致を含める必要があります)。