この条件またはパラメーターを使用して Mongodb でクエリを作成する方法を探しています。
たとえば、入力テキストが「rtab」の場合、「brats」、「bart」などの結果になります。
この検索方法の用語がわからないので、助けていただければ幸いです。
この条件またはパラメーターを使用して Mongodb でクエリを作成する方法を探しています。
たとえば、入力テキストが「rtab」の場合、「brats」、「bart」などの結果になります。
この検索方法の用語がわからないので、助けていただければ幸いです。
本質的にはサポートされていませんが、入力単語「brats」と「brats」を受け取り、それらを並べ替えて「abrst」と「abrs」にするインデックスを作成し、以下で構成されるルックアップ インデックスを作成することで、これを実現できます。
stem: "abrst", matches: ["brats"]
stem: "abrt", matches: ["brat", "bart"]
次に、「brat」を検索するときは、文字を並べ替えて「abrt」を取得し、それを使用して検索を実行します。
db.lookups.find({stem: /^abrt/})
返されるすべてのドキュメントには、入力した単語で始まる単語が含まれている必要があります。これはかなり初歩的ですが、うまくいくはずです。Solr インデクサーのような、これをより適切に行う特殊ベースの検索エンジンが存在する可能性があります。
ここであなたが抱えている最大の問題は、単語のスペルミスです。
単語をステミングしても修正されません。ステミングは「ツリー」を「ツリー」などに変換するだけです。この問題を解決できる (信頼できる) 言語ライブラリはありません。
これは実際、検索技術のブラック スポットのようなものです。Google は、アプリケーション (電子メールなど) のさまざまなソースから収集した単語の検索インデックスを使用して辞書を作成し、オートコンプリート モードで検索ボックスに (できれば) 正しいスペルを提供します。用語は、はるかに一般的なフレーズによく似ています。
Mongo には、$where
これを可能にする MR または配列ベースの単語セットを介した機能はありません。
これを解決するには、次のようにします: 単語abrt
は似ているbart
ので、単語のリストを格納し、別のインデックスでクエリを実行して、類似した単語のリスト (geoNear タイプの単語コマンドなど) を検索し、類似しているが正確ではない結果を検索します。 . これは基本的に他の人が行う方法を再現するものであり、正確な科学ではありませんが、ほとんどの場合うまくいくはずです。
単語を並べ替えることでこれを解決する際の主な問題は、スペルミスの組み合わせが何百もある場合があるため、うまくスケーリングできない可能性があることです。
全文検索に Mongo を使用する場合は、次のリンクが非常に役立ちます: http://www.mongodb.org/display/DOCS/Full+Text+Search+in+Mongoで、必要な考慮事項が詳細に説明されています。
これは、MongoDB クエリ言語の従来の構文では不可能だと思います。これを行う唯一の方法は、$where 引数を使用することです。この引数は、コレクション内の各ドキュメントに対して ("this" 変数として) 実行される Javascript 関数を受け取り、クエリによって返されるかどうかに応じて true または false を返します。
この機能はここに文書化されています: http://www.mongodb.org/display/DOCS/Server-side+Code+Execution#Server-sideCodeExecution-%7B%7B%24where%7D%7DClausesandFunctionsinQueries
$where は非常に遅いことに注意してください。パフォーマンスがユースケースの要件である場合、MongoDB でこれを行うことはできないと思います。
セキュリティ警告:これがアプリケーションの一部である場合、ユーザー提供の文字列から Javascript コードを手続き的に生成する必要があります。ユーザーがスクリプト コードを挿入できないように注意する必要があります。