8

要素の配列内の配列に、検索に一致するはずのテキストが含まれている場合、ドキュメントを取得できません。

以下に 2 つのドキュメントの例を示します。

{
    _id: ...,
    'foo': [
        {
            'name': 'Thing1',
            'data': {
                'text': ['X', 'X']
            }
        },{
            'name': 'Thing2',
            'data': {
                'text': ['X', 'Y']
            }
        }
    ]
}

{
    _id: ...,
    'foo': [
        {
            'name': 'Thing3',
            'data': {
                'text': ['X', 'X']
            }
        },{
            'name': 'Thing4',
            'data': {
                'text': ['X', 'Y']
            }
        }
    ]
}

次のクエリを使用すると、両方のドキュメントを返すことができます。 db.collection.find({'foo.data.text': {'$in': ['Y']}}

ただし、全文コマンド/インデックスを使用してこれらの結果を返すことができません。 db.collection.runCommand("text", {search" "Y"})

「Thing1」に対して検索を発行する同じコマンドが最初のドキュメントを返し、「Thing3」が 2 番目のドキュメントを返すため、全文検索が機能していることは確かです。

を使用する場合、 foo.data.text と foo.name の両方がテキストインデックスにあると確信していますdb.collection.getIndexes()

を使用してインデックスを作成しました: db.collection.ensureIndex({'foo.name': 'text', 'foo.data.text': 'text'}). 上記のコマンドで表示されるインデックスは次のとおりです。

    {
            "v" : 1,
            "key" : {
                    "_fts" : "text",
                    "_ftsx" : 1
            },
            "ns" : "testing.collection",
            "background" : true,
            "name" : "my_text_search",
            "weights" : {
                    "foo.data.text" : 1,
                    "foo.name" : 1,
            },
            "default_language" : "english",
            "language_override" : "language",
            "textIndexVersion" : 1
    }

mongo の全文検索でこれを機能させる方法について何か提案はありますか?

4

1 に答える 1