2015-02-05 13 views
0

lunr을 사용하여 검색을 수행하고 있으며 검색 텍스트 영역의 값에서 검색을 강조하고 있지만 lunr은 줄무늬를 사용하고 전체 검색 용어와 구체적으로 일치하지 않는 결과를 반환합니다. lunr이 검색을 끝내는 검색어의 줄기에 액세스 할 수있는 방법이 있습니까? 사용을 lunrlunr : 결과 내에서 강조 표시 할 수 있도록 검색된 용어의 줄기를 반환합니다.

// query our lunr index 
searchResults = _.map(index.search($('#searchInput').val()), function (res) { 
    var uid = res.ref; 
    return mediaList[uid]; 
}); 

답변

1

기본 형태소 분석기를 사용하면, 예를 들어, 줄기 할 토큰 무엇이든 자신을 호출 할 수 있습니다 lunr.stemmer

에서 함수로 사용할 수 있습니다

lunr.stemmer("stemming") //= "stem" 

그러나 나는 당신이 또한 막아야 한 검색하는 문서의 토큰 때문에, 이것은 당신이 원하는 것을 달성하는 데 도움이됩니다 생각하지 않습니다이 형태소는 하나의 방법 작업입니다. 예를 들어, 위의 예에서 어떤 다른 단어가 "줄기"로 유래했는지 알 수 없으므로 강조 할 용어가 부족할 수 있습니다.

나중에 역 스템 찾아보기를 사용하면 출력에서 ​​결과 검색 용어를보다 쉽게 ​​찾을 수 있습니다. 이 색인에서 사용자 지정 파이프 라인 기능을 삽입함으로써 달성 될 수있다 : 이제 줄기에서 온 수있는 모든 토큰을 조회 한 다음 결과를 찾아 적절하게 강조 할 수

// going to store a hash of stemmed word to list of original words 
var reverseStem = {} 

var reverseStemIndexBuilder = function (token) { 
    var stemmed = lunr.stemmer(token) 

    if (stemmed in reverseStem) { 
    reverseStem[stemmed].push(token) 
    } else { 
    reverseStem[stemmed] = [token] 
    } 

    return stemmed 
} 

// idx is your instance of a lunr index  
// we can remove the existing stemmer since reverseStemIndexBuilder already returns a stemmed token 
idx.pipeline.remove(lunr.stemmer) 
idx.pipeline.add(reverseStemIndexBuilder) 

.