2016-11-04 3 views
0

나는 Mongodb에서 텍스트 검색에 대해 집계 메소드를 사용하고 있습니다. 나는 이것으로 다양한 방법을 시도했지만 여전히 내 결과를 필터링하는 올바른 방법을 찾을 수 없습니다. 인덱스를 설정했는데 $ 텍스트 검색만으로도 잘 작동하며 쿼리만으로도 잘 작동합니다. 나는이 쿼리에 의해 더 모델을 필터링 할 수 있도록하려는 그러나Mongodb - 검색 쿼리로 집계 텍스트 검색을 사용하는 방법

Model.aggregate([ 
    { $match: { $text: { $search: searchValue } } }, 
    { $project: { displayTitle: 1, title: 1, body: 1, _type: 1, _id: 1, score: { $meta: "textScore" } } }, 
    { $match: { score: { $gt: 1.0 } } } 
], function (err, models) { 

}) 

:

다음은 텍스트 검색을 수행 내 코드의

나는이 일 것이라고 생각했을 것이다
Model.find({_parentIds: {$in: arrayOfIds}}) 

:

Model.aggregate([ 
    { $match: { $text: { $search: searchValue }, _parentIds: {$in: arrayOfIds} } }, 
    { $project: { displayTitle: 1, title: 1, body: 1, _type: 1, _id: 1, score: { $meta: "textScore" } } }, 
    { $match: { score: { $gt: 1.0 } } } 
]) 

하지만 슬프게도 그렇지 않습니다. 아무도 이것을 시도 했습니까, 아니면 제가 빠진 것이 있습니까? 이 같은 것

[{ 
    displayTitle: "first item", 
    title: "first_item", 
    _type: "item", 
    _parentIds: ["123", "234"] 
}, { 
    displayTitle: "second item", 
    title: "second_item", 
    _type: "item", 
    _parentIds: ["123", "234"] 
}, { 
    displayTitle: "third item", 
    title: "third_item", 
    _type: "item", 
    _parentIds: ["345", "456"] 
}] 

내 현재 검색 :

searchValue = "item" 
arrayOfIds = ["345"]; 

만 다시이 문서를 기다리고있을 것입니다 :

{ 
    displayTitle: "third item", 
    title: "third_item", 
    _type: "item", 
    _parentIds: ["345", "456"] 
} 
여기

내가 통해 찾고 있어요 예를 들어 모음입니다

감사!

+0

당신이 샘플 문서 예상 출력을 추가시겠습니까? – Veeram

+0

@Veeram - 샘플 컬렉션과 예상 출력을 추가했습니다. – darylhedley

답변

1

텍스트 점수는 0.75입니다. 따라서 일치 필터를 0.5 이상으로 변경하면됩니다.

본문 _id를 제외하고 부모 ID를 포함하도록 수정 된 프로젝션입니다.

이 쿼리로 만든 인덱스입니다.

db.textcol.createIndex({ displayTitle: "text" }) 

이 쿼리를 실행합니다.

db.textcol.aggregate([ 
    { $match: { $text: { $search: "item" }, _parentIds: {$in: ["345"]} }} , 
    { $project: { displayTitle: 1, title: 1, _type: 1, _id: 0, _parentIds :1, score: { $meta: "textScore" } }}, 
     { $match: { score: { $gt: 0.5 } } } 
]) 

출력 :

{ 
    "displayTitle": "third item", 
    "title": "third_item", 
    "_type": "item", 
    "_parentIds": ["345", "456"], 
    "score": 0.75 
} 
+0

감사합니다 !!! 이것은 나를 구원했다! 그래서, 제가 좀 더 명확히해야했던 실제 문제는 제가 원하지 않는 결과를 반환했기 때문입니다 (그래서 _parentIds 배열에 _parentId가없는 모델). 위의 해결책은 그것을 고쳤으며 주된 이유는 $ project에서 _parentIds : 1과 _id : 0이었고 점수의 $ 일치는 너무 높았습니다. 어떻게 보지 못했는지 확실하지 않았습니다 ... – darylhedley

관련 문제