Published 2022. 4. 25. 01:24

1.find

db.collection('post').find().toArray(function(err,res){ 한번에 다찾고싶을때 쓰면됍니다.

res.render('파일이름', {posts:result}}

db.collection('post').findone(찾고싶은녀석)(function(err,res){ 하나만찾으려면 이거쓰기

res.render('파일이름', {posts:result}}

2.indexing

let 검색조건 =[
    
      {
        $search: {
          index: 'titleSearch',
          text: {
            query: 요청.query.value,
            path:'제목'  // 제목날짜 둘다 찾고 싶으면 ['제목', '날짜']
          }//검색요청하는 부분임
        }
      },
    {$sort : {_id :1}},//결과 정렬하기
    {$limit :10},//갯수 limit 주기
    {$project : { 제목 :1, _id : 0, score: {$meta:"searchScore"}}} 
    // search score 얼마나관련있는지 점수임 이런것도알려줌
    제목 : 1 제목은 가져오셈 id => id 빼고가져오셈

  ]
  db.collection('post').aggregate(검색조건).toArray(function (err, res) { //aggregate 는 검색조건을 여러개 넣어줄수있음
    console.log(result)// 이런식으로 하면 or식으로 찾아줌 개꿀;
    
    res.render('search.ejs', { posts: result });

 

        $search: {
          index: 'titleSearch',
          text: {
            query: 요청.query.value,
            path:'제목'  // 제목날짜 둘다 찾고 싶으면 ['제목', '날짜']
          }//검색요청하는 부분임
        }

path 쪽에서 설정하는것들

1.-쓰면 제외가능
2."어쩌구 저쩌구"정확히 일치하는것만 가능
 이런  text index의 문제점=>한글친화적이지않음
  해결책 첫번째
1.text index 쓰지말고 검색할문서의양을 제한해주십쇼 랭킹이나 날짜로 제한도 가능
2.text index 만들때 다르게 만들기 띄어쓰기 단위로 indexing 금지
   글자 두개 단위로 indexing하기 (nGram)

 

indexing을 사용해야하는 이유

정확히 일치하는것만 찾아주는거 해결하는거 해결할려면 1.정규식쓰면됍니다.(ex. /abc/등등 사용) 근데 이거 임시방편이에요 문제점은 게시물이 겁나많아지면 문제가됌 왜냐하면 게시물이 많아지면 찾는시간이 오래걸림 //find()로하지말고 indexing이라고하면 게시물 1억 개라도 찾기가 빨라짐
그중에 하나의 게시물이 찾고싶을 때 db야 id가 70인게시물찾아와 컴퓨터는 바보라서 하 나씩 찾아봄;; 무슨하나 찾는데하루종일걸립니다.
//1부터 100까지 하나 생각할테니까 하나 맞춰보라고하면 예 ,아니오로만답변가능 컴퓨터는 1인가요?라고물어봄 2 인가요? 이렇게물어볼듯 똑똑한사람들은 니가 지금 생각하고있는게 50이상이냐? 75이상이냐? 계속 반을 짤라가면서 물어봅니다 그러면 아주빨라집니다-> 효율적임 이게바로 Binary Search 라고합니다.
//전제 조건이 하나있음 숫자순으로 미리 정렬이 되있어야댐 //제목들을 미리 정렬해주면 (indexing) 몽고디비는 알아서 Binary search 해줌


몽고디비에서 설정하는것들

 3.방금만든 index 만들어주고 search index 쓰셈 한국어 친화적으로 만들수있음(MonggoDB)
  이때 index Name 잘지어주세요 titelSearch라고만들어보셈 
  어떤 collection에서 설정해주셈 index Analyzer 루씬머시기말고
 다른걸로 바꾸어줘야합니다. 랭귀지를 코리안으로 바꾸셈 루씬.korean 이렇게하면 한국어 형태소 분석기입니다.
   한국어에서 필요없는 조사들을 걸러서 을,를 같은거 쓸데없는 조사를 제거해줌 검색정확도 상승
    =>add Field 해주세요.

복사했습니다!