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에서 빈 어레이[ ]를 제공하고 있습니다.
기본적인 것을 먼저 시도해 보세요.
limit
그리고.skip
const results = await MyModel.find({ $text: { $search: "text" } });
mongosh를 사용하여 인덱스가 올바르게 생성되었는지 확인하십시오.
db.stories.getIndexes()
또는 나침반 GUI가 모두 연결되어 있습니다.그렇지 않으면 COMPASS GUI 또는 mongosh를 사용하여 문서를 작성합니다.
- 그럼 바꿔봐
searchText
여러 번 시도합니다. - 이 모든 일이 있었음에도 불구하고 제대로 된 결과를 얻는데 7~8번의 같은 코드를 실행했는데
언급URL : https://stackoverflow.com/questions/28775051/best-way-to-perform-a-full-text-search-in-mongodb-and-mongoose
'itsource' 카테고리의 다른 글
'속성이 '없음' 유형에 없습니다.' (0) | 2023.03.13 |
---|---|
React에서 빈 dom 요소를 정의하는 올바른 방법 (0) | 2023.03.13 |
MongoDB 컬렉션 하이픈으로 연결된 이름 (0) | 2023.03.13 |
InputStream을 JSONObject로 변환 (0) | 2023.03.13 |
내 워드프레스 게시물을 인스타그램에 공유하는 방법 (0) | 2023.03.13 |