필자는 공백을 포함 할 수있는 일련의 태그가있는 일련의 문서를 보유하고 있습니다. 사용자가 맞춤법이 틀린 태그 집합을 제공하고 일치하는 태그 중 가장 많은 수의 문서 (원하는 경우 가중치)를 찾으려합니다.JavaScript에서 가장 근접한 태그 세트 일치 검색 방법은 무엇입니까?
문서 당 수천 개의 문서와 태그가 있지만 최대 100 개의 태그가 있습니다.
자바 스크립트를 사용하여 검색이 클라이언트 측에서 완전히 이루어져야하지만 경량이며 성능이 뛰어난 솔루션을 찾고 있지만 node.js로 인덱스를 일부 사전 처리 할 수 있습니다.
제 아이디어는 다중 세트를 사용하는 문서에 대한 역 색인 색인과 맞춤법이 틀린 태그의 올바른 철자를 찾는 퍼지 색인을 작성하는 것입니다.이 색인은 node.js의 전처리 단계에서 작성되어 JSON으로 직렬화됩니다. 파일. 검색 단계에서 쿼리의 각 항목에 대해 먼저 문의하여 가장 가능성있는 올바른 태그를 얻기 위해 퍼지 인덱스를 설정하고 역 색인을 참조하여 결과 집합을 가방 (번호가 매겨진 집합)에 추가하는 경우, . 모든 입력 태그에 대해이 작업을 수행 한 후 내림차순으로 정렬 된 가방의 내용이 가장 일치하는 문서를 제공해야합니다.
내 질문
- 이 일반적인 문제처럼 보인다, 내가 다시 사용할 수있는 그것에 대한 구현은 이미입니까? 나는 lunr.js와 fuse.js를 보았다. 그러나 그들은 다른 초점을 가진 것처럼 보인다.
- 문제에 대한 현명한 접근 방법입니까? 명백한 개선 사항이 있습니까?
- 퍼지 단계를 역 색인에서 분리하는 것이 더 좋습니까? 아니면이를 결합하는 방법이 있습니까?이
var documents = [{ id: 1, tags: ["foo", "bar"], },{ id: 2, tags: ["hurp", "durp"] }] var idx = lunr(function (builder) { builder.ref('id') builder.field('tags') documents.forEach(function (doc) { builder.add(doc) }) }) console.log(idx.search("fob~1")) console.log(idx.search("hurd~2"))
이 Lunr의 기능 부부의 활용 :