sql >> データベース >  >> NoSQL >> MongoDB

MongoDB $ text検索はどのように機能しますか?

    MongoDBテキスト検索では、スノーボールステミングライブラリ を使用します 単語を期待される語根形式(または語幹)に減らす )一般的な言語規則に基づいています。アルゴリズムによるステミングは迅速な削減を提供しますが、言語には、精度に影響を与える可能性のある例外(不規則または矛盾する動詞の活用パターンなど)があります。 スノーボールの紹介 アルゴリズムステミングのいくつかの制限の概要が含まれています。

    walkingの例 walkの語幹 期待どおりに一致します。

    ただし、trekkingの例 trekkに由来します そのため、trekの検索キーワードと一致しません 。

    これを確認するには、クエリを説明し、parsedTextQueryを確認します。 使用された語幹検索用語を示す情報:

    db.events.find({$text: {$search: 'Trekking'} }).explain().queryPlanner.winningPlan.parsedTextQuery
    {
    ​   "terms" : [
    ​       "trekk"
    ​   ],
    ​   "negatedTerms" : [ ],
    ​   "phrases" : [ ],
    ​   "negatedPhrases" : [ ]
    }
    

    オンラインの Snowball Demo を使用して、予想されるSnowballのステミングを確認することもできます。 または、好みのプログラミング言語用のSnowballライブラリを見つけることによって。

    ユースケースに一般的に影響を与える可能性のある例外を回避するには、検索結果に影響を与えるキーワードを使用して、テキストインデックスに別のフィールドを追加することを検討できます。この例では、trekを追加します イベントがtrekkingとして記述されるように、キーワードとして 検索結果にも一致します。

    一般にレンマ化と呼ばれる、より正確な語尾変化のための他のアプローチがあります。 。 Lemmatizationアルゴリズムはより複雑で、自然言語処理 のドメインに向かい始めます。 。アプリケーションにさらに高度なテキスト検索を実装する場合に利用できるオープンソース(および商用)ツールキットは多数ありますが、これらはMongoDBテキスト検索機能の現在の範囲外です。




    1. Mongodbで、すべてのドキュメントが値に対して一意であるかどうかを確認するにはどうすればよいですか?

    2. PHPMongoクエリがNULLではありません

    3. MongoDBBSONの逆シリアル化

    4. mongodbワイルドカードは、特定のキーのすべての値に一致します