2013-09-02 3 views
2

MongoDB 데이터베이스에 HTML 문서를 저장하고 전체 텍스트 검색 기능을 제공하려는 Node.js 앱을 개발 중입니다. 내가 볼 수 있듯이 MongoDB에 포함 된 전체 텍스트 검색은 문서가 일반 텍스트이기를 기대하므로 내 HTML 문서의 색인을 생성하는 데 적합하지 않습니다. 그 가정은 맞습니까? 만약 그렇다면 사람들은 이것을 어떻게 권장합니까?MongoDB 풍부한 문서 검색

다른 검색에서 SO posts 탄성 검색이 가장 권장되는 경로 인 것으로 보입니다. Java App을 그림에 가져 오는 것에 대해 모두 행복하다고 말할 수는 없습니다. 또한 완전히 별개의 앱을 갖는 것이 내 이상적인 시나리오가 아닙니다.

+0

선택의 여지가 있거나 별도의 앱을 사용하거나하지 않아도됩니다. 당신이해야할지 안할지를 결정하기 위해 실제로 투표를하지 않습니다. 그 선택은 당신의 것입니다. – Sammaye

+0

알았어요. MongoDB가 전체 텍스트 검색에 사용하는 텍스트를 필터링하여 HTML 마크 업과 같은 콘텐츠를 제거 할 수 있도록 색인에 포함되지 않았습니까? – nevf

+0

아니요 현재 아니요 – Sammaye

답변

1

HTML에서 일부 정규식을 던져 HTML에서 직접 strip the markup을 시도 할 수 있습니다. 출력은 MongoDB에 의해 색인 될 수 있습니다.

ES 나 Solr과 같은 검색 도구를 사용하는 것보다 실제로 개발하기가 쉽지만 실제로는 범위를 벗어납니다. HTML을 제거하면 문맥 정보가 손실된다는 의미입니다. 잘못된 HTML은 문제를 일으킬 수 있습니다.

+0

Mongo FTS에 포함되지 않는 HTML과 Mongo FTS에 포함될 일반 텍스트로 두 번씩 각 문서를 두 번 저장해야합니까? – nevf

+0

예, HTML을 색인 할 필요가 없으므로 큰 문제는 아닙니다. 또한 미친 듯이 페이지를 크롤링하더라도 텍스트의 크기는 비교적 작습니다. 공간 요구 사항에 대해 걱정이된다면 텍스트 색인이 더 큰 문제가 될 것입니다. HTML은 어쨌든 (합리적으로 빠른 방식으로) 검색 할 수 없기 때문에 압축 될 수도 있습니다. – mnemosyn

+0

인덱싱 데이터는 항상 일반 문서를 유지하기 위해 한 번, 빠르게 검색하기 위해 한 번 인덱스를 사용하여 두 번 저장하는 것을 의미합니다 (일반적으로 전체 텍스트 인덱스에서 완전히 읽을 수있는 문서를 다시 만들거나 어렵습니다). 또한 ES에도 적용됩니다. 인덱스에 대한 추가 저장 영역과 소스 문서에 대해 사용할 수없는 항목을 "낭비"합니다. @mnemosyn이 제안한 방법은 실제로 ES가 입력을 검색 가능한 사전 토큰으로 변환하는 "분석기"로 수행하는 작업입니다. ES는 여러 문서 형식의 표준을 준수하기 위해 신중하게 구현되었습니다. –