복붙노트

[MONGODB] 몽구스의 무게와 전체 텍스트 검색

MONGODB

몽구스의 무게와 전체 텍스트 검색

나는 버전 3.8.9 이후, 찾을 때, 몽구스 전체 텍스트 검색을 지원합니다. 그러나 나는 그것을 위해 좋은 문서를 찾을 수 없습니다! 내가 좋아하는 뭔가를하고 싶지 :

db.collection.ensureIndex(
    // Fields to index
    {
        animal:  "text",
        color:   "text",
        pattern: "text",
        size:    "text"
    },

    // Options
    {
        name: "best_match_index",

        // Adjust field weights (default is 1)
        weights: {
            animal: 5,  // Most relevant search field
            size:   4   // Also relevant
       }
    }
)

나는 순수한 몽구스와 함께 할 수 있습니까? 아니면 내가 몽구스 텍스트 검색과 같은 몇 가지 플러그인을 사용할 수 있나요? 어떻게 무게없이 어떻습니까? 그리고 나는 그것을 어떻게해야합니까?

해결법

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

    1.예, 몽구스> = 3.8.9 전체 텍스트 검색을 할 수 있습니다. 우선, 컬렉션 최대 하나의 텍스트 인덱스 할 수 있습니다 (문서 참조). 따라서, 여러 분야에 대한 텍스트 인덱스를 정의하기 위해, 당신은 복합 인덱스가 필요합니다 :

    예, 몽구스> = 3.8.9 전체 텍스트 검색을 할 수 있습니다. 우선, 컬렉션 최대 하나의 텍스트 인덱스 할 수 있습니다 (문서 참조). 따라서, 여러 분야에 대한 텍스트 인덱스를 정의하기 위해, 당신은 복합 인덱스가 필요합니다 :

    schema.index({ animal: 'text', color: 'text', pattern: 'text', size: 'text' });
    

    지금 당신은이 같은 $ 텍스트 쿼리 연산자를 사용할 수 있습니다 :

    Model
        .find(
            { $text : { $search : "text to look for" } }, 
            { score : { $meta: "textScore" } }
        )
        .sort({ score : { $meta : 'textScore' } })
        .exec(function(err, results) {
            // callback
        });
    

    이것은 또한 관련 항목 별 결과를 정렬합니다.

    무게에 관해서는, 당신은 (몽구스의 v4.0.1와 적어도 작업) (당신이 복합 인덱스를 정의) 지수 () 메소드에 무게 옵션 개체를 전달할 시도 할 수 있습니다 :

    schema.index({ animal: 'text', color: 'text', pattern: 'text', size: 'text' }, {name: 'My text index', weights: {animal: 10, color: 4, pattern: 2, size: 1}});
    
  2. ==============================

    2.MongoDB를 2.6로, 모음은 최대 하나의 텍스트 인덱스 (여기 문서화를) 할 수 있습니다. 따라서 MongoDB의 현재 버전 당신이 원하는 일을 할 수 없습니다. 정말, 경기의 위치에 따라 서로 다른 무게의 요구 사항과 복잡한 텍스트 검색 문제를 들어, SOLR 또는 ElasticSearch 같은 완전한 텍스트 검색 솔루션을 고려해야합니다.

    MongoDB를 2.6로, 모음은 최대 하나의 텍스트 인덱스 (여기 문서화를) 할 수 있습니다. 따라서 MongoDB의 현재 버전 당신이 원하는 일을 할 수 없습니다. 정말, 경기의 위치에 따라 서로 다른 무게의 요구 사항과 복잡한 텍스트 검색 문제를 들어, SOLR 또는 ElasticSearch 같은 완전한 텍스트 검색 솔루션을 고려해야합니다.

    그들을 MongoDB를의 해결 방법으로, 수동으로 필드를 토큰 화 수있는 키워드 배열로 저장하고 인덱스 :

    animal: ["The", "quick", "brown", "fox", "jump", ..., "dog"]
    

    다음 쿼리와 같은

    db.test.find ({동물 : {$에서 : [ "갈색", "신발"]})

    모방 텍스트 검색. 수동 작업을 설정하는 데 필요한 것처럼이 방법의 몇 가지 제한이 있습니다, 사실은 더에 유래가 없을 것입니다 예를 들어, 일치, 중지 단어가처럼 제거되지 않습니다 사실을 "꿈"과 "꿈" 일반 텍스트 인덱스 및 가중 메커니즘의 부재.

  3. ==============================

    3.나는를 알려준 다음 문서를 발견 http://code.tutsplus.com/tutorials/full-text-search-in-mongodb--cms-24835 나는 다음을 사용하여 상단의 대답에서 만든 지수 하락

    나는를 알려준 다음 문서를 발견 http://code.tutsplus.com/tutorials/full-text-search-in-mongodb--cms-24835 나는 다음을 사용하여 상단의 대답에서 만든 지수 하락

    db.tablename.dropIndex({"indexname_text"})  
    

    나는이 명령으로 인덱스의 목록을 가지고

    db.tablename.getIndexes()
    

    나는 다음 인덱스를 생성하려면 다음을 사용

    db.tablename.createIndex({"$**":"text"})
    

    다음 명령은 몽구스에서 일

    model.find(
        {$text: {$search: "text you are searching for"}},
        {score: {$meta: "textScore"}})
        .sort({score:{$meta:"textScore"}}
    )
    .exec(function(err, results) {
        `enter code here`if(!err){
        console.log('results ' + results);
    }
    else
    {
        console.log(err);
    }
    });
    
  4. ==============================

    4.

        var searchQuery=new RegExp('dam', 'i');
        var query = { firstName : searchQuery };
        Model.find(query ...
    
  5. from https://stackoverflow.com/questions/24714166/full-text-search-with-weight-in-mongoose by cc-by-sa and MIT license