MongoDB 전체 텍스트 인덱스를 만드는 방법
전체 텍스트 검색은 텍스트 인덱스를 사용하여 Mongo에서 지원됩니다. 텍스트 인덱스는 값이 문자열이거나 가중치를 줄 수 있는 문자열 요소의 배열인 모든 필드를 포함할 수 있습니다. 텍스트 인덱스의 경우 인덱싱된 필드의 가중치는 텍스트 검색 점수 측면에서 다른 인덱싱된 필드와 관련된 필드의 중요성을 나타냅니다.
db.snippets.createIndex(
{
title: "text",
tags: "text",
"codeSnippets.comment": "text",
"codeSnippets.code": "text",
sourceUrl: "text"
},
{
weights: {
title: 8,
tags: 13,
"codeSnippets.comment": 3,
"codeSnippets.code": 1,
sourceUrl: 1
},
name: "full_text_search",
default_language: "none",
language_override: "none"
}
);
문서의 각 인덱싱된 필드에 대해 MongoDB는 일치 항목 수에 가중치를 곱하고 결과를 합산합니다. 이 합계를 사용하여 MongoDB는 문서의 점수를 계산합니다. 그런 다음 아래 스니펫과 같이 텍스트 점수를 기준으로 반환 및 정렬하는 방법에 대한 자세한 내용을 보려면 $meta 연산자를 사용할 수 있습니다.
let getPublicBookmarksForSearchedTerms = async function (nonSpecialSearchTerms, page, limit, sort, specialSearchFilters, searchInclude) {
let filter = {
public: true
}
if ( nonSpecialSearchTerms.length > 0 ) {
if(searchInclude === 'any') {
filter.$text = {$search: nonSpecialSearchTerms.join(' ')}
} else {
filter.$text = {$search: bookmarksSearchHelper.generateFullSearchText(nonSpecialSearchTerms)};
}
}
addSpecialSearchFiltersToMongoFilter(specialSearchFilters, filter);
let sortBy = {};
if ( sort === 'newest' ) {
sortBy.createdAt = -1;
} else {
sortBy.score = {$meta: "textScore"}
}
let bookmarks = await Bookmark.find(
filter,
{
score: {$meta: "textScore"}
}
)
.sort(sortBy)
.skip((page - 1) * limit)
.limit(limit)
.lean()
.exec();
return bookmarks;
}
Shared with ❤️ from Codever. 👉 use the copy to mine functionality to add it to your personal snippets collection.
Reference
이 문제에 관하여(MongoDB 전체 텍스트 인덱스를 만드는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/codever/how-to-create-a-mongodb-full-text-index-4f11텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)