programing

MongoDB 텍스트 검색 및 여러 검색어

firstcheck 2023. 5. 13. 21:40
반응형

MongoDB 텍스트 검색 및 여러 검색어

응용프로그램에 전체 텍스트 기능을 제공하는 데 사용하는 배열 "키"에 색인이 있습니다.

2.4.3 릴리스에서는 "텍스트" 인덱스 유형을 사용하려고 합니다.배열 "키"에 "텍스트" 인덱스 유형을 보험에 넣었는데, (이전 키워드 전체 텍스트 방법보다) 매우 빠르게 작동하는 것 같습니다.

문제는 내 앱이 필드가 포함(AND)이라고 가정한다는 것입니다.기본적으로 텍스트 검색은 매개 변수를 OR합니다.

텍스트 검색을 포괄적으로 실행하는 방법을 아는 사람이 있습니까?

예:

db.supplies.runCommand("text", {search:"printer ink"})

프린터 또는 잉크로 모든 결과를 반환하는 대신 프린터와 잉크로 결과를 반환해야 합니다.

시도해 보십시오.

db.supplies.runCommand("text", {search:"\"printer\" \"ink\""})

또한 다음은 문서의 인용문입니다.

검색 문자열에 구문이 포함된 경우 검색은 검색 문자열의 다른 용어와 함께 AND를 수행합니다. 예를 들어 "twinkle twinkle" little star 검색은 "twinkle twinkle" 및 "little" 또는 "star"를 검색합니다.

각 단어를 큰따옴표로 묶을 수 있습니다.

let keywords = ctx.params.query.split(/\s+/).map(kw => `"${kw}"`).join(' ');
match.$text = { $search: keywords, $caseSensitive: false };

사용자가 따옴표로 묶인 문자열을 입력하면 작동하지 않는다는 단점이 있습니다.따옴표로 묶은 문자열을 먼저 구문 분석해야 합니다.

@alecxe가 앞에서 지적했듯이 텍스트 색인 열에서 AND 검색을 수행하려면 각 검색어를 이중 따옴표로 묶어야 합니다.아래는 귀하의 요구사항에 맞는 간단한 한 줄입니다.

db.supplies.runCommand("text", {search: "printer ink".split(" ").map(str => "\""+str+"\"").join(' ')})

노드에서 하위 단어를 사용하여 검색하기 위해 만든 간단한 기능이 있습니다.누군가에게 도움이 되길 바랍니다.

사용자가 다음을 검색한다고 가정해 보겠습니다.pri nks따라서 프린터와 잉크를 만족시켜야 하지만 $text 검색에서는 이를 허용하지 않기 때문에 다음과 같은 간단한 기능이 있습니다.

    var makeTextFilter = (text) => {
    var wordSplited = text.split(/\s+/);
    /** Regex generation for words */
    var regToMatch = new RegExp(wordSplited.join("|"), 'gi');
    let filter = [];
    searchFieldArray.map((item,i) => {
        filter.push({}); 
        filter[i][item] = {
            $regex: regToMatch,
            $options: 'i'
        }
    })

    return filter;
  }

그리고 당신의 질문에 이렇게 그것을 사용합니다.

let query = {...query, $or: makeTextFilter(textInputFromUser)}
tableName.find(query, function (err, cargo_list)

언급URL : https://stackoverflow.com/questions/16902674/mongodb-text-search-and-multiple-search-words

반응형