2011-09-17 3 views
2

온라인 성경 검색 프로그램을 개발 중입니다. 성경은 평범한 텍스트로 거의 5MB의 공간을 차지하는 상당히 큰 책입니다. 다른 웹 사이트에서 검색어를 개발하거나 성경을 자체 서버에 저장하지 않고도 자신의 성경 검색 위젯과 프로그램을 포함 할 수 있도록 프로그램에서 API를 구현할 계획입니다.큰 검색 가능한 텍스트 파일을 저장하는 가장 좋은 방법

이 점을 염두에두고 필자는 궁극적으로 프로그램을 통과하는 적절한 수준의 쿼리 흐름을 기대하게 될 것입니다. 또한 성경에 익숙하지 않은 사람들을 위해 텍스트 서식을 지정하는 두 가지 방법이 있습니다. 빨간색 텍스트와 이탤릭체를 모두 포함 할 수 있습니다. 나는 빨간 글자와 이탤릭체 형식으로 성경을 보관할 수있는 방법이 필요하지만 검색 쿼리는 형식을 무시할 수 있어야합니다.

또한 가능한 한 신속하고 효율적인 (메모리 및 CPU 사용) 필요가 있습니다. 형식을 무시하고 쿼리를 수행 할 수있는 한 모든 저장 형식이 고려됩니다 (MySQL, JSON 또는 XML 텍스트 파일 등). 파일 크기와 개수는 중요하지 않으므로 책이나 챕터를 별도의 파일로 나눠도 좋습니다.

한 가지 더 중요한 점은 여러 구절을 검색 할 수있는 검색 방법이 필요하다는 것입니다. 그래서 "에 대한 검색하지만 하나님에 대한 영원한 생명은 그의 아들을 보내지 않았습니다"는 John 3 : 16,17을 반환합니다. 모든 아이디어에 감사드립니다!

+0

grep을 사용하여 정말 빠르게 검색 할 수 있습니다. 어떤 플랫폼을 사용할 계획입니까? – galchen

답변

2

오픈 소스 문서 검색 엔진은 당신이하고자하는 일에 맞게 만들어져 있습니다. Solr, Elastic Search, Xapian, Whoosh, Haystack (Django 용으로 제작 됨) 등이 있습니다. S.O에는 다른 게시물이 있습니다. 다른 곳과 다른 곳을 사용하면 얻을 수있는 이점을 누릴 수 있지만 요구 사항은 매우 간단하여 어느 것이나 괜찮을 것입니다. (프로젝트가 시작될 때 최소한의 노력으로 쉽게 확장 할 수 있습니다. 항상 알아두면 좋습니다.) 솔라가 가장 인기 있고 가장 많이 사용되는 것은 솔로이지만, Elastic Search는 동일한 인기있는 Lucene 백엔드를 사용하며 분명히 일어나기가 훨씬 쉽습니다. 달리기 시작 했으니 까.

실제로 구현하는 경우 단일 구절 (또는 단지 구절 번호)을 반환하려는 경우 각 구절을 별도의 "문서"로 색인화해야합니다.검색 엔진은 관련성에 따라 결과의 순위를 처리합니다 (일반적으로 관심이있는 경우 tf/idf 알고리즘 사용).

기울임 꼴과 빨간색 텍스트를 처리하는 방법은 텍스트에 일종의 마크 업을 포함시키는 것입니다 (즉, 기울임 꼴은 단일 별표로, 빨간색은 두 개의 별표로 묶습니다). 그런 다음 분석기에서 해당 문자를 무시하도록합니다. - 선택의 틀에서 더 간단한 방법이 있을지도 모르지만 소금 한 알을 가지고 선택하십시오. 여러 구절 요구 사항을 포괄하는 질의는 더 복잡하지만, 대답은 아마 각 구절을 하나의 문서로 색인하는 것과 관련이 있습니다 (또는 그에 더하여 생각해 볼 필요가 있습니다).

검색 색인에 익숙하지 않은 경우 Elastic Search처럼 플러그 앤 플레이로 설계된 것조차도 설정하는 데 약간의 시간과 노력이 필요하므로 절대적으로 이 필요합니다.이 작업을 빨리 시작하고 이미 MySQL에 익숙해졌습니다. 전체 텍스트 검색을 수행 할 수 있다고 생각합니다. 그러나 확실히이 직업을위한 최선의 도구는 아니므로,이 프로젝트가 당신에게 투자된다면, 나중에 이러한 검색 프레임 워크 중 하나를 배우기 위해 약간의 노력을 기울이시면 고맙겠습니다. 다른 사람들이 지적했듯이 상대방이 다루는 텍스트의 양이 너무 많을 수는 있지만 원하는 텍스트로 검색하는 방법은 매우 유연합니다. 예를 들어, 나중에 다른 요구 사항을 추가하는 것은 매우 간단합니다 (예를 들어, 사람들이 검색을 빨간색 텍스트의 일치로만 제한 할 수 있음).

1

나는 성경이 형식을 가지고 있다는 것을 몰랐다. 그것은 무엇을 위해 사용됩니까? 구절을위한 것이라면 나는 모든 구절을 데이터베이스에 저장할 것을 제안합니다. 고도로 정규화 된 형식으로 책이있는 테이블, 장이있는 테이블 및 절이있는 테이블이 있습니다. 각 운문은 운문 번호와 절 텍스트로 구성됩니다.

이제 챕터에는 제목이 없으므로 사실 숫자 일뿐입니다. 이 경우에는 별도로 저장하는 것이 바보 같으므로 각 장에는 장 번호와 절 번호 및 절 텍스트가있는 책 표와 절이 있습니다. 그 텍스트는 평범한 텍스트라고 생각하지 않습니까?

구절이 일반 텍스트 인 경우 MySQL에 저장하고 FULLTEXT 색인을 만들어 쉽게 검색 할 수 있습니다. 그렇게하면 매우 효율적으로 검색하고 와일드 카드 등을 사용할 수 있습니다.

구절에 서식이있는 경우 검색을위한 일반 텍스트와 표시 할 서식있는 텍스트가 포함 된 두 개의 열을 만들도록 선택할 수 있지만 필요하다고 생각됩니다.

추 신 : 5MB의 텍스트는 실제로 아무것도 아닙니다. 헌신적 인 프로그램을 가지고 있다면 그것을 메모리에 하나의 문자열로 유지하고 strpos 또는 유사한 기능을 사용하여 텍스트를 찾을 수 있습니다. 어떤 언어, 데이터베이스 및 플랫폼을 사용하고 있습니까?

+0

램프 서버를 사용하고 있습니다. 나는 PHP로 프로그래밍 중이며 MySQL은 사용할 최고의 데이터베이스가 될 것이다. 일반 텍스트 버전과 형식화 된 버전을 저장하려는 귀하의 아이디어는 훌륭하게 작동합니다. 나는 그렇게 생각하지 않았다. 제가 말씀 드리는 "형식"은 그리스도의 말씀이 적색이고 이탤릭 단어가 킹 제임스 버전입니다. –

관련 문제