MongoDBの全文検索--- ttlsaチュートリアルシリーズのMongoDBの(X)

フルテキスト検索(FTSを:フルテキスト検索の要素を)MongoDBは、バージョン2.4で追加された新機能です。以前のバージョンでは、非効率的であるクエリに正確マッチングと正規表現を介し。フルテキストインデックス、必要な内蔵のマルチ言語とセグメンテーション方法の内容から、大量のテキストを検索する機能。最初の言語は、宇宙---中国でサポートされていません。すべての文字列を分割するので、フルテキストインデックスは、異なる場所に保存され、衰退のMongoDB書き込み性能につながります。フルテキストインデックスは、技術と使用がたくさんあります。このようなように、検索エンジン、ウェブ検索、およびなど。多くの場合、フルテキスト検索持っていた:luceneのスフィンクスのRedis-検索Riakに検索を、しかし、中国の検索は満足のいくものではありません。オープンソース雪だるまのワードブレーカーのMongoDBの使用は、次の言語インデクシングhttp://snowball.tartarus.org/texts/stemmersoverview.html MongoDBの全文を参照してください。もしデンマーク語オランダ語英語フィンランド語フランス語ドイツ語ハンガリー語イタリア語ノルウェー語ポルトガル語ルーマニア語ロシアスペイン語スウェーデン語トルコ語別の言語を使用したい、あなたは、インデックスを作成するときに使用する言語を指定する必要があります。デフォルトでは、英語でサポートされています。
> db.de.ensureIndex( {txt: "text"}, {default_language: "german"} )
1.フルテキストインデックス処理を有効にします
> db.adminCommand( { setParameter : 1, textSearchEnabled : true } )
{ "was" : false, "ok" : 1 }
これはデフォルトではオフになっています。それ以外の場合は、「誤る」エラーになります2.次は、テストデータに挿入された「テキスト検索が有効でない」いくつかの「ホテル・カリフォルニア」を挿入し、これは非常に有名なポップミュージック20世紀の最初のものです。
> db.ttlsa_com.insert({"song":"1. Hotel California", "lyrics": "On a dark desert highway, cool wind in my hair. Warm smell of colitas, rising up through the air."})
> db.ttlsa_com.insert({"song":"2. Hotel California", "lyrics": "Up ahead in the distance, I saw a shimmering light. My head grew heavy and my sight grew dim."})
> db.ttlsa_com.insert({"song":"3. Hotel California", "lyrics": "Such a lovely place, Such a lovely face."})
> db.ttlsa_com.insert({"song":"4. Hotel California", "lyrics": "Some dance to remember, some dance to forget."})
> db.ttlsa_com.insert({"song":"5. Hotel California", "lyrics": "Welcome to the Hotel California"})
> db.ttlsa_com.insert({"song":"加州旅馆", "lyrics": "Welcome to the Hotel California"})
3.フルテキストインデックスを作成します。
> db.ttlsa_com.ensureIndex({"song":"text", "lyrics":"text"})
或者
> db.ttlsa_com.ensureIndex({"$**": "text"})
$**表示在所有的字符串字段上创建一个全文索引。
也可以指定权重
> db.ttlsa_com.ensureIndex({"song":"text"},{"weights":{"song": 2, "$**": 3}})
4.インデックス情報をチェック
> db.system.indexes.find().toArray()
[
        {
                "v" : 1,
                "key" : {
                        "_id" : 1
                },
                "ns" : "testindex.ttlsa_com",
                "name" : "_id_"
        },
        {
                "v" : 1,
                "key" : {
                        "_fts" : "text",
                        "_ftsx" : 1
                },
                "ns" : "testindex.ttlsa_com",
                "name" : "song_text_lyrics_text",
                "weights" : {
                        "lyrics" : 1,
                        "song" : 1
                },
                "default_language" : "english",
                "language_override" : "language",
                "textIndexVersion" : 1
        }
]
によってフルテキストインデックス
db.collection.runCommand( "text", { search: <string>,
                                    filter: <document>,
                                    project: <document>,
                                    limit: <number>,
                                    language: <string> } )
達成するために非のfind()コマンドによって、照会します。
> db.ttlsa_com.runCommand("text",{search:"Welcome"})
{
        "queryDebugString" : "welcom||||||",
        "language" : "english",
        "results" : [
                {
                        "score" : 0.6666666666666666,
                        "obj" : {
                                "_id" : ObjectId("5203366a1e234f712039f7ef"),
                                "song" : "5. Hotel California",
                                "lyrics" : "Welcome to the Hotel California"
                        }
                },
                {
                        "score" : 0.6666666666666666,
                        "obj" : {
                                "_id" : ObjectId("5203366b1e234f712039f7f0"),
                                "song" : "加州旅馆",
                                "lyrics" : "Welcome to the Hotel California"
                        }
                }
        ],
        "stats" : {
                "nscanned" : 2,
                "nscannedObjects" : 0,
                "n" : 2,
                "nfound" : 2,
                "timeMicros" : 86
        },
        "ok" : 1
}
反転:あなたが検索したい単語の前に「 - 」という単語を含むレコードを除外します。
> db.ttlsa_com.runCommand("text",{search:"hotel -California"})
{
        "queryDebugString" : "hotel||california||||",
        "language" : "english",
        "results" : [ ],
        "stats" : {
                "nscanned" : 6,
                "nscannedObjects" : 0,
                "n" : 0,
                "nfound" : 0,
                "timeMicros" : 172
        },
        "ok" : 1
}
Wordは必ずしも有効ではありません。として
> db.ttlsa_com.runCommand("text",{search:"the"})
{
        "queryDebugString" : "||||||",
        "language" : "english",
        "results" : [ ],
        "stats" : {
                "nscanned" : 0,
                "nscannedObjects" : 0,
                "n" : 0,
                "nfound" : 0,
                "timeMicros" : 35
        },
        "ok" : 1
}
それは検索されません。上記といえば、MongoDBは中国の検索をサポートしていません。洗練された検索機能を使用するか、スフィンクスを使用します。 スフィンクスの内容は 、HTTP :? //www.ttlsa.com/ S =転載についてはスフィンクスソースを明記してください:で見つけることができ MongoDBのフルテキスト検索を http://www.ttlsa.com/html/2230.html

ます。https://my.oschina.net/766/blog/210889で再現

おすすめ

転載: blog.csdn.net/weixin_33711641/article/details/91546357