2014-12-13 4 views
1

내 랩톱 CouchDB에서 로컬로 내 앱을 실행하면 완벽하게 작동하지만 Cloudant에서 복제를 실행할 때 중단됩니다. 내가 작동하도록하려면 https://github.com/walling/unorm js libs를 사용해야했다. 그러나 이것은 js 코드의 너무 많은 kb를 내 좋아하는 것에 추가한다 (나는 매우 속도에 사로 잡혀있다).로컬 couchDB를 Cloudant에 복제 된 것과 완전히 비슷하게 만드는 문자열 정규화

필자는 Cloudant가 사용하는 것과 동일한 utf-8 인코딩을 사용하여 로컬 CouchDB를 인코딩하는 것을 선호합니다. 그렇게 할 수있는 가장 좋은 방법은 무엇입니까?

내 앱은 페이지의 html에 포함 된 csv 파일에서 데이터를 가져 오는 클라이언트 측 (브라우저의 모든 브라우저) 미니 검색 엔진입니다. csv는 couchDB에서 우분투 14.10을 실행하는 노트북에서 생성됩니다. 이 앱은 이중 언어, 영어 및 프랑스어입니다. bottinbio.com

입력시 사용자에게 단어를 제안하는 제안 기능 (기본 웹 사이트가 아니라 프로토 타입에 있음)을 코딩했습니다. 데이터는 랩톱 CouchDB 데이터베이스를 복제하여 만든 Cloudant 데이터베이스에서 가져옵니다.

문제는 Cloudant 데이터베이스에서 검색된 "bière"와 같은 강조 단어가 로컬 CouchDB와 다르게 인코딩된다는 것입니다. 일반적으로 단어 "bière"를 클릭하면 해당 단어에 대한 CSV 검색이 시작되지만 CSV에 "bière"라고 쓰여져도 검색이 실패합니다. 제안 사항이 로컬 호스트 개발 서버의 CouchDB 데이터베이스에서 가져온 경우에는 발생하지 않습니다.

+0

표시되는 문제에 대한 설명/예를 제공 할 수 있습니까? Cloudant와 CouchDB는 동일한 방식으로 동작해야합니다. 또한 로컬 CouchDB 설정 (Erlang 버전, OS 등)에 대해 알고 있으면 유용 할 것입니다. –

+0

@WillHolley 자세한 설명을 추가했습니다. 매우 간단한 응용 프로그램을 만들고 싶습니다. 마이크로 편집 기능 (500-1000 단어/문서)을 갖춘 작은 검색 엔진입니다. 어떤 비슷한 이미 존재할 수 있습니다 ... –

+0

기본 라틴어 문자 집합 이외의 문자를 찾기 위해 \ W를 사용하여 regExp를 만들 수 있으며 https://github.com/walling/unorm을 사용하여 해당 문자를 정규화 할 수 있습니다. 속도 향상이 있는지 테스트 할 수 있습니다. –

답변

1

Google에서 많은 것을 검색 한 결과 unorm을 사용하는 유니 코드 정규화 'NFC'가 가장 간단한 방법임을 알았습니다. 내 localhost couchDB 및 대부분의 브라우저가 'NFC'문자열 정규화를 사용하는 것처럼 보이기 때문에 Cloudant 데이터베이스가 'NFC'를 따르는 방법을 찾기가 훨씬 쉽고 버그가 적습니다.

exemple "Bières"(프랑스어 맥주),

CouchDB를 : "\ u0042 \ u0069 \ u00E8 \ u0072 \ u0065 \ u0073"

Cloudant : "\ u0042 \ u0069 \ u0065 \ u00300 \ u0072 \ u0065 \ u0073 "

또 다른 가능성은 두 데이터베이스에서 다른 모든 단어 문자열의 목록을 포함하는 json 파일을 만들고이를 확인하는 데 사용하는 것입니다. 제 경우에는 25kb 크기의 작은 파일을 제공합니다. 데이터베이스에 더 많은 데이터가 추가되면서 문제가 동기화됩니다. 구현하기가 그리 복잡하지는 않지만 HTML5 앱의 국제화가 진행됨에 따라 오류가 발생할 수 있습니다.