lunr 형태소 분석기에서 파이프 라인 함수로 구현된다 아래 코드의 예이다. 파이프 라인 기능은 문서를 인덱싱 할 때 문서의 각 단어와 검색 할 때 검색 쿼리의 각 단어에 대해 실행됩니다.
파이프 라인에서 작동하는 함수의 경우 매우 간단한 인터페이스를 구현해야합니다. 단일 문자열을 입력으로 받아 들여야하며 문자열로 출력해야합니다.
은 그래서 매우 간단한 (그리고 쓸모없는) 파이프 라인 기능과 같을 것이다 다음
- :
var simplePipelineFunction = function (word) {
return word
}
실제로 우리가이 일을하기 위해 필요한이 파이프 라인 기능을 사용하려면 파이프 라인 기능으로 등록하면 lunr이 파이프 라인을 직렬화 및 비 직렬화 할 수 있습니다.
- 인덱스 파이프 라인에 추가하십시오. 이 같은 보일 것
: 이제
// registering our pipeline function with the name 'simplePipelineFunction'
lunr.Pipeline.registerFunction(simplePipelineFunction, 'simplePipelineFunction')
var idx = lunr(function() {
// adding the pipeline function to our indexes pipeline
// when defining the pipeline
this.pipeline.add(simplePipelineFunction)
})
, 당신은 위의 내용을 가지고, 우리의 파이프 라인 기능의 구현을 바꿀 수 있습니다. 영어 이외의 언어로 작업하는 lunr을 적응
var myGreekStemmer = function (word) {
// I don't know how to use the greek stemmer, but I think
// its safe to assume it won't be that different than this
return greekStem(word)
}
그냥 추가하는 것보다 더 많은 것을 필요로 : 그래서, 대신 단어 변경 반환하는, 당신이 어쩌면이 같은 단어를 막기 위해 발견 그리스 형태소 분석기를 사용할 수 있습니다 그래도 형용사. lunr의 기본 언어는 영어이므로 기본적으로 영어에 특화된 파이프 라인 기능을 포함합니다. 영어와 그리스어 당신은 아마 영어 기본값으로 인덱스 그리스어하려고 문제로 실행됩니다만큼 다른, 그래서 우리는 다음을 수행해야합니다
- 는 우리의 언어 별 형태소 분석기
- 제거와 기본 형태소 분석기를 교체 비 라틴 문자와 잘 맞지 않는 기본 트리머
- 기본 스톱 워드 필터를 대체/제거합니다. 영어 이외의 언어에서는 많이 사용되지 않을 것입니다.
트리머와 스톱 워드 필터는 파이프 라인 기능으로 구현되므로 특정 언어를 구현하면 스 트리머와 유사합니다.
그래서, 당신이있을 것입니다 그리스어에 대한 lunr 설정 : 당신은 훌륭한 lunr-languages 프로젝트에서 좀 걸릴 수 있습니다 좀 더 영감을
var idx = lunr(function() {
this.pipeline.after(lunr.stemmer, greekStemmer)
this.pipeline.remove(lunr.stemmer)
this.pipeline.after(lunr.trimmer, greekTrimmer)
this.pipeline.remove(lunr.trimmer)
this.pipeline.after(lunr.stopWordFilter, greekStopWordFilter)
this.pipeline.remove(lunr.stopWordFilter)
// define the index as normal
this.ref('id')
this.field('title')
this.field('body')
})
를, 그것은 lunr에 대한 언어 확장을 만드는 많은 예제가 있습니다. 그리스어로 제출할 수도 있습니다.나뿐만 아니라 내가 생각으로 lunr.Pipeline
API를 모르는처럼
편집 대신 우리는 단지 그것을 제거 후 제거하는 기능 후에 교체를 삽입하고, 더 replace
기능은 없다 보인다.
EDIT 미래에 다른 사람들을 돕기 위해 추가 ... 문제는 lunr 내의 토큰의 케이스까지 내려갔습니다. lunr은 모든 토큰을 소문자로 취급하려고합니다. 이것은 구성 가능성없이 tokenizer에 있습니다. 대부분의 언어 처리 기능의 경우 이것은 문제가되지 않지만 실제로 대부분의 경우에는 낮은 사례가 있다고 가정합니다. 이 경우, 그리스어 형태소 분석기는 그리스어에서 형태소 분석의 복잡성으로 인해 대문자 단어를 줄기 만합니다 (나는 그리스어 사용자가 아니기 때문에 형태소 분석이 얼마나 더 복잡한 지에 대해 언급 할 수 없습니다). 해결 방법은 그리스어 스 트리머를 호출하기 전에 대문자로 변환 한 다음 토큰을 나머지 파이프 라인으로 전달하기 전에 다시 소문자로 변환하는 것입니다.
내가 Github 저장소에 문제로 게시하는 것이 좋습니다. – MEGADEVOPS