Programing

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

lottogame 2020. 11. 21. 08:20
반응형

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


저는 수일 동안 Google에서 검색하고 있으며 많은 것을 시도했지만 여전히 내 사용자 컬렉션에 대해 좋은 전체 텍스트 검색을 수행 할 수 없습니다.

ElasticSearch를 시도했지만 쿼리 및 페이지 매김이 매우 불가능했습니다 ...

나는 ElMongo, mongoose-full-text, Mongoosastic 등과 같은 Mongoose 용 플러그인을 많이 시도했습니다. 모든 사람이 문서화되어 있고 전체 텍스트 검색을 수행하는 방법을 모르겠습니다.

따라서 내 컬렉션은 일반 컬렉션입니다.

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

나는 간단한있는 페이지의 검색 입력이 POST나는 입력하면, hello world전체 컬렉션에서 검색하는 것입니다 내가 필요한 내 검색 쿼리의 일치하는 단어를 필드와 결과를 얻을 수 있습니다.

페이지 당 10 개 항목 등의 페이지 매김을 처리하는 옵션이있는 것도 정말 좋을 것입니다.

이를 달성하는 가장 좋은 솔루션은 무엇입니까? 저는 Mongoose, NodeJS 및 ExpressJS와 함께 MongoDB 2.6. *을 사용하고 있습니다.

감사.


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

텍스트 검색을 지원하는 색인을 만들려면 다음 nameprofile.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 텍스트 인덱스 문서 를 참조하세요 .


검색 쿼리의 경우 Elasticsearch 플러그인을 사용할 수 있습니다. Elasticsearch에서는 실시간으로 지정된 기간으로 특정 텍스트와 문자열을 검색하기위한 사용자 지정 검색 쿼리를 만들 수 있습니다.

그러나 그 전에 MongoDB에있는 json 문서의 인덱싱을 만들어야합니다. MongoDB를 Elasticsearch 서버와 연결 한 다음 Elasticsearch의 강 기능을 사용하여 데이터의 Elasticsearch 서버에서 인덱싱을 수행 한 다음 검색을위한 사용자 지정 쿼리를 만들 수 있습니다.

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

반응형