2012-11-08 4 views
0

각 레코드에 약 200-400 자의 레코드가있는 10,000-50,000 개의 레코드를 처리합니다. 내가 가질 수있는 검색어의 수는 1500 개가 넘지 않을 것으로 예상됩니다 (모두 현지 업체와 관련 있음).Ruby를 사용하여 수백 개의 태그가있는 구조화 된 텍스트 및 반 구조화 된 텍스트 구문 분석

구조화 된 태그를 용어 목록과 비교하여 데이터를 태그 지정하는 함수를 만들고 싶습니다.

이 용어는 비즈니스 설명을 기반으로합니다. 예를 들어 [Jazz Bar], [Nightclub], [Sports Bar] 또는 [Wine Bar]은 모두 [Bar]에 대한 검색어와 일치합니다.

일반적으로이 데이터에는 기존 태그가 있습니다. 따라서 첫 번째 패스의 엄격한 계층 구조를 만든 다음 기존 태그가없는 경우 두 번째 패스를 수행 할 수도 있습니다.

이것을 구현하는 가장 성능에 민감한 방법은 무엇입니까? 나는 모든 키워드를 가진 테이블을 가질 수 있고 각각의 데이터 조각들과 그것들을 매치 시키려고한다. 이것은 자유 텍스트를 처리 할 때 덜 당연한 기존 태그와 일치하는 경우에 간단합니다. 나는 그것은 Sphinx 검색 엔진과 ThinkingSphinx 루비 보석을 사용할 수있는 매우 안전한 내기 Heroku가/PostgreSQL을

+0

어디에서 쿼리를 수행 하시겠습니까? PostgreSQL 또는 Ruby 코드에서? 이 일회성 일이나 정규 일입니까? 그리고 태그를 식별 할 때 무엇을하고 싶습니까? 안타를 계산합니까? 그것들을 다른 것으로 바꿉니 까? –

+0

특정 데이터 및 메타 데이터를 캐싱하는 일별/주별 작업입니다. 태그 기반 쿼리 메커니즘이 있으므로 캐시에 저장 한 태그에 태그를 첨부하고 태그가있는 항목의 누계를 유지합니다. 8 개의 최상위 태그가 있으며 각 태그에는 2-8 개의 리프 태그가 있습니다. 감사! – SFRubyNewby

+0

이것이 귀하의 케이스에 얼마나 잘 어울리는 지 모르지만 Redis and Elasticsearch를 살펴보십시오. –

답변

0

을 사용하고

. 예, 구성 오버 헤드가 있지만 아직 스핑크스가 저를 실패한 시나리오를 찾을 수 없습니다. :-)

설정하는 데 30-60 분이 걸릴 경우 시도해보십시오. 저는 Sphinx를 사용하여 복잡한 쿼리 (3 개의 개별 검색 기준 + 2 개의 개별 필드 그룹/정렬)가있는 600,000 개 이상의 레코드로 DB 테이블을 검색했으며 0.625 초의 결과를 얻었습니다. 이는 전혀 나쁘지 않으며 확실합니다. 순수한 루비 코드로 자신을 완성 할 수있는 것보다 훨씬 낫습니다.

관련 문제