itsource

MongoDB 및 Mongoose에서 전체 텍스트 검색을 수행하는 가장 좋은 방법

mycopycode 2023. 3. 13. 20:28
반응형

MongoDB 및 Mongoose에서 전체 텍스트 검색을 수행하는 가장 좋은 방법

저는 며칠 전부터 구글에서 검색을 하고 있고, 여러 가지를 시도했지만, 여전히 제 사용자 컬렉션에서 전체 텍스트 검색을 제대로 할 수 없습니다.

Elastic Search를 시도했지만 조회 및 페이지 수가 거의 불가능했습니다.

엘몽고, 몽구스 풀텍스트, 몽구사스틱 등 몽구스용 플러그인을 많이 써봤어요.모든 사람이 문서 상태가 좋지 않아서 전체 텍스트 검색을 제대로 수행할 수 없습니다.

제 컬렉션은 일반 컬렉션입니다.

user = {
  name: String,
  email: String,
  profile: {
    something: String,
    somethingElse: String
  }
}

간단한 페이지에 검색 입력이 있습니다.POST입력했을 경우hello world필요한 것은 전체 컬렉션 필드에서 검색 쿼리와 일치하는 단어를 검색하여 결과를 얻는 것입니다.

페이지당 10개 정도의 아이템을 취급할 수 있는 옵션도 있으면 좋을 것 같습니다.

이를 실현하기 위한 최선의 솔루션은 무엇입니까?MongoDB 2.6.*를 Mongoose, NodeJS 및 Express와 함께 사용하고 있습니다.JS.

감사해요.

Mongoose 스키마 정의에 텍스트 인덱스를 추가하여 연산자를 사용할 수 있습니다.find쿼리를 사용하여 텍스트 색인에 포함된 모든 필드를 검색합니다.

텍스트 검색을 지원하는 인덱스를 작성하려면 다음과 같이 하십시오.name그리고.profile.something:

var schema = new Schema({
  name: String,
  email: String,
  profile: {
    something: String,
    somethingElse: String
  }
});
schema.index({name: 'text', 'profile.something': 'text'});

또는 인덱스에 모든 문자열 필드를 포함하려면'$**'와일드카드:

schema.index({'$**': 'text'});

그러면 다음과 같은 페이지 형식의 텍스트 검색 쿼리를 수행할 수 있습니다.

MyModel.find({$text: {$search: searchString}})
       .skip(20)
       .limit(10)
       .exec(function(err, docs) { ... });

자세한 내용은 MongoDB 텍스트인덱스 매뉴얼을 참조하십시오.

이것은 추가 답변이 아니라 추가 답변이지만, 위의 답변이 Johnny의 경우HK에서 빈 어레이[ ]를 제공하고 있습니다.

  1. 기본적인 것을 먼저 시도해 보세요.limit그리고.skip

    const results = await MyModel.find({ $text: { $search: "text" } });

  2. mongosh를 사용하여 인덱스가 올바르게 생성되었는지 확인하십시오.db.stories.getIndexes()또는 나침반 GUI가 모두 연결되어 있습니다.그렇지 않으면 COMPASS GUI 또는 mongosh를 사용하여 문서를 작성합니다.

나침반

  1. 그럼 바꿔봐searchText여러 번 시도합니다.
  2. 이 모든 일이 있었음에도 불구하고 제대로 된 결과를 얻는데 7~8번의 같은 코드를 실행했는데

언급URL : https://stackoverflow.com/questions/28775051/best-way-to-perform-a-full-text-search-in-mongodb-and-mongoose

반응형