독립형 풀 텍스트 검색 서버 선택 : Sphinx 또는 Solr? [닫은
-
18-09-2019 - |
문제
다음 속성이있는 독립형 풀 텍스트 검색 서버를 찾고 있습니다.
- 여러 클라이언트의 검색 요청을 제공 할 수있는 독립형 서버로 작동해야합니다.
- SQL 쿼리의 결과를 색인하여 "대량 인덱싱"을 수행 할 수 있어야합니다.
- 무료 소프트웨어 여야하며 데이터베이스로 MySQL을 사용하여 Linux에서 실행해야합니다.
- 빠르 봐야합니다 (MySQL의 내부 전체 텍스트 검색을 배제)
이러한 특성을 가진 대안은 다음과 같습니다.
- Solr (루센 기반)
- Elasticsearch (Lucene 기반)
- 스핑크스
내 질문 :
- 그들은 어떻게 비교합니까?
- 대안을 놓쳤습니까?
- 나는 각 유스 케이스가 다르다는 것을 알고 있지만, 내가 확실히 할 경우 어떤 경우가 있습니까? ~ 아니다 특정 패키지를 사용하고 싶습니까?
해결책
나는 거의 2 년 동안 Solr을 성공적으로 사용해 왔으며 Sphinx를 사용한 적이 없으므로 분명히 편견이 있습니다. 그러나 문서 나 다른 사람들을 인용하여 목표를 유지하려고 노력할 것입니다. 나는 또한 내 대답에 패치를 가져갈 것이다 :-)
유사성 :
- Solr과 Sphinx는 모든 요구 사항을 충족합니다. 그들은 빠르고 큰 데이터의 데이터를 효율적으로 색인하고 검색하도록 설계되었습니다.
- 둘 다 긴 교통 부위의 목록을 사용하여 사용합니다 (솔러, 스핑크스)
- 둘 다 상업적 지원을 제공합니다. (솔러, 스핑크스)
- 둘 다 여러 플랫폼/언어에 대한 클라이언트 API 바인딩을 제공합니다 (스핑크스, 솔러)
- 둘 다 속도와 용량을 높이기 위해 배포 할 수 있습니다 (스핑크스, 솔러)
몇 가지 차이점은 다음과 같습니다.
- Apache 프로젝트 인 Solr은 분명히 Apache2-licensed입니다. 스핑크스는 GPLV2입니다. 즉, 상업용 응용 프로그램에 스핑크스를 포함 시키거나 확장 해야하는 경우 상용 라이센스를 구매해야합니다 (이론적 해석)
- Solr입니다 쉽게 내장 할 수 있습니다 Java 응용 프로그램에서.
- Solr은 Lucene 위에 지어졌으며, 이는 입증 된 기술입니다. 8 살 a 거대한 사용자 기반 (이것은 단지 작은 부분 일뿐입니다). 루센이 새로운 기능이나 속도를 늘릴 때마다 Solr도이를 얻습니다. Solr에 최선을 다하는 많은 개발자들도 Lucene Committers입니다.
- Sphinx는 RDBMS, 특히 MySQL과 더 단단히 통합됩니다.
- Solr 일 수 있습니다 Hadoop과 통합하여 분산 응용 프로그램을 구축합니다
- Solr 일 수 있습니다 Nutch와 통합하여 Crawler와 함께 본격적인 웹 검색 엔진을 신속하게 구축합니다..
- Solr Can Microsoft Word, PDF 등과 같은 인덱스 독점 형식. 스핑크스 캔트.
- Solr은 a 상자에서 철자 검사기.
- Solr은 함께 제공됩니다 상자 밖으로 패싯지지. 스핑크스에서 측면 더 많은 일을합니다.
- Sphinx는 필드 데이터에 대한 부분 색인 업데이트를 허용하지 않습니다.
- 스핑크스에서 모든 문서 ID는 고유 한 서명되지 않은 정수가 아닌 정수 번호 여야합니다.. 솔러 많은 작업에 고유 키가 필요하지 않습니다, 고유 키는 정수 또는 문자열 일 수 있습니다.
- Solr 지원 필드 붕괴 (현재 추가 패치로만) 유사한 결과를 복제하지 않도록합니다. 스핑크스는 이와 같은 기능을 제공하지 않는 것 같습니다.
- 하는 동안 Sphinx는 문서 ID 만 검색하도록 설계되었습니다, Solr에서는 거의 모든 종류의 데이터로 전체 문서를 직접 얻을 수있어 외부 데이터 저장소와 더 독립적으로 만들 수 있으며 추가 왕복을 저장합니다.
- Solr, 사용 된 내장을 제외하고는 자바 웹 컨테이너 Tomcat 또는 Jetty와 같은 추가 특정 구성 및 튜닝 (또는 사용할 수 있습니다 부두 포함 그리고 그냥 시작하십시오
java -jar start.jar
). 스핑크스에는 추가 구성이 없습니다.
관련 질문 :
다른 팁
독점적 인 방식으로 검색 기능을 확장 할 필요가 없다면 Sphinx가 최선의 방법입니다.
스핑크스 장점 :
- 개발 및 설정이 더 빠릅니다
- 훨씬 더 낫고 더 빠른 집계. 이것은 우리에게 살인자 기능이었습니다.
- XML이 아닙니다. 이것이 궁극적으로 우리를 위해 Solr을 배제한 것입니다. 우리는 다소 큰 결과 세트를 반환해야했다 (수백 가지의 결과를 생각). XML을 오가는 시간은 절대적으로 성능을 죽였습니다. 작은 결과 세트의 경우 완벽하게 괜찮 았습니다.
- 오픈 소스 앱에서 본 최고의 문서
Solr 장점 :
- 확장 할 수 있습니다.
- 웹 앱에서 직접 누를 수 있습니다. 즉, 자동 완성 된 검색이 Ajax를 통해 직접 Solr 서버를 누르도록 할 수 있습니다.
참고 : 같은 질문을 염두에두고 많은 사용자가 있습니다.
따라서 요점에 대한 답변 :
어떤 것과 왜?
사용 솔러 웹 앱 (예시적인 검색 엔진)에서 사용하려는 경우. API 덕분에 분명히 위대 할 것입니다. 웹 앱을 위해서는 확실히 그 힘이 필요합니다.
사용 스핑크스 수많은 문서/파일을 검색하려면 실제로 빠르게 검색하려면. 그것은 너무 빨리 색인화됩니다. JSON 또는 XML을 구문 분석하여 검색 결과를 얻는 앱에서 사용하지 않는 것이 좋습니다. 직접 DB 검색에 사용하십시오. MySQL에서 잘 작동합니다.
대안
이것들은 거인이지만 더 많은 것이 있습니다. 또한 사용자 지정 프레임 워크에 전원을 공급하기 위해이를 사용하는 것들이 있습니다. 그래서 나는 당신이 정말로 놓치지 않았다고 말할 것입니다. 하나가 있지만 Elasticsearch 그것은 좋은 사용자 기반을 가지고 있습니다.
나는 거의 1 년 동안 Sphinx를 사용해 왔으며 놀랍습니다. MacBook에서 약 1 분 안에 150 만 문서를 색인하고 서버에서 더 빠르게 색인 할 수 있습니다. 또한 Sphinx를 사용하여 특정 위도 및 경도 내의 장소로의 검색을 제한하고 있으며 매우 빠릅니다. 또한 결과가 순위가 매겨지는 방법은 매우 조정 가능합니다. 튜토리얼을 읽는 경우 설치 및 설정이 쉽습니다. 거의 1.0 상태이지만 석방 후보자는 견고했습니다.
Lucene / Solr은 비즈니스와 훨씬 더 강력한 사용자 커뮤니티에서 더 많은 등장하는 것으로 보입니다. IMHO 일부가 직면 한 것처럼 보이기 때문에 초기 설정 문제를 극복 할 수 있다면 Lucene / Solr이 최선의 방법이라고 말할 것입니다.