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
'programing' 카테고리의 다른 글
서비스에서 사용할 네트워크 드라이브 매핑 (0) | 2023.05.13 |
---|---|
다음 오류로 인해 CLSID가 {XXXX}인 구성 요소에 대한 COM 클래스 팩토리를 검색하지 못했습니다. 80040154 (0) | 2023.05.13 |
"git export"(예: "svn export")를 합니까? (0) | 2023.05.13 |
Git 분기에서 특정 파일을 병합하는 방법 (0) | 2023.05.13 |
vblLf, vbCrLf 및 vbCr 상수의 차이 (0) | 2023.05.13 |