복붙노트

[MONGODB] 여러 필드와 MongoDB를 텍스트 검색

MONGODB

여러 필드와 MongoDB를 텍스트 검색

나는 여러 필드 작업과 MongoDB를 전체 텍스트 검색을 얻기 위해 노력하고있어. 나는 3 개 필드 - 이름, 설명, 카테고리에 인덱스를 설정하고 확인했습니다

document.collection.getIndexes () 이는 returns-

[
    {
        "v" : 1,
        "key" : {
            "_id" : 1
        },
        "name" : "_id_",
        "ns" : "document.collection"
    },
    {
        "v" : 1,
        "key" : {
            "name" : 2,
            "description" : 1,
            "category" : 1
        },
        "name" : "name_2_description_1_category_1",
        "ns" : "document.collection",
        "background" : true,
        "safe" : null
    }
]

지금, 나는 다음 - 명령을 사용하여 텍스트 검색을 수행하려고하면

db.collection.find(  {$text:{$search:'alias'}}  ).limit(10)

다음과 같은 오류 메시지를 받았습니다 :

error: {
    "$err" : "Unable to execute query: error processing query: ns=document.collection limit=10 skip=0\nTree: TEXT : query=alias, language=, tag=NULL\nSort: {}\nProj: {}\n planner returned error: need exactly one text index for $text query",
    "code" : 17007
}

나는 구글과 MongoDB를 문서를 시도했지만 난 아무것도 찾을 수 없습니다.

해결법

  1. ==============================

    1.당신은 당신이 검색 할 필드에 텍스트 인덱스를 생성해야합니다 :

    당신은 당신이 검색 할 필드에 텍스트 인덱스를 생성해야합니다 :

    db.deals.ensureIndex({ name: "text", description : "text", category : "text" });
    

    은 $ 텍스트 연산자의 문서에서 :

    당신이 당신의 세 필드에 생성 된 인덱스는 복합 인덱스가 아닌 텍스트 인덱스입니다. 텍스트 인덱스는 다음과 같이 표시됩니다

    {
        "v" : 1,
        "key" : {
            "_fts" : "text",
            "_ftsx" : 1
        },
        "name" : "name_text_description_text_category_text",
        "ns" : "test.deals",
        "weights" : {
            "category" : 1,
            "description" : 1,
            "name" : 1
        },
        "default_language" : "english",
        "language_override" : "language",
        "textIndexVersion" : 2
    }
    
  2. from https://stackoverflow.com/questions/24257390/mongodb-text-search-with-multiple-fields by cc-by-sa and MIT license