OP의 질문에 답하는 것 외에도 간단한 설치 에서 자세한 설치 및 구현에 이르기까지 Apache Solr에 대한 통찰력을 제공하겠습니다 .
간단한 소개
위의 검색 엔진 또는 목록에없는 다른 엔진에 대해 경험이있는 사람은 여러분의 의견을 듣고 싶습니다.
실시간 문제를 해결하기 위해 Solr을 사용 해서는 안됩니다. 검색 엔진의 경우 Solr 은 거의 게임이며 완벽하게 작동합니다 .
Solr 은 High Traffic 웹 응용 프로그램에서 제대로 작동합니다 (이 사이트에 적합하지 않은 곳을 읽었지만 그 진술을 백업하고 있습니다 ). CPU가 아닌 RAM을 사용합니다.
부스트는 당신이 당신의 결과가 상단에 표시 순위를하는 데 도움이됩니다. 말, 당신은 이름을 검색하려는 존 필드의에서 FIRSTNAME 및 LASTNAME , 당신은에 관련성을 부여 할 FIRSTNAME의 다음 필요 필드 부스트 업 FIRSTNAME의 그림과 같이 필드.
http://localhost:8983/solr/collection1/select?q=firstname:john^2&lastname:john
보다시피, firstname 필드는 2 점으로 향상 됩니다.
SolrRelevancy 에 대한 추가 정보
속도는 믿을 수 없을 정도로 빠르며 타협하지 않습니다. 내가 Solr 으로 이사 한 이유 .
인덱싱 속도와 관련하여 Solr 은 데이터베이스 테이블에서 JOINS 를 처리 할 수도 있습니다 . 더 높고 복잡한 JOIN 은 인덱싱 속도에 영향을줍니다. 그러나 거대한 RAM 구성으로이 상황을 쉽게 해결할 수 있습니다.
RAM이 높을수록 Solr의 인덱싱 속도가 빠릅니다.
Solr 과 Django 를 통합하려고 시도하지 않았지만 Haystack 을 사용하여이를 달성 할 수 있습니다 . 나는 똑같은 흥미로운 기사 를 발견 했으며 여기에 github 이 있습니다.
- 리소스 요구 사항-사이트가 VPS에서 호스팅되므로 검색 엔진에 많은 RAM과 CPU가 필요하지 않습니다.
Solr 은 RAM에서 번식하므로 RAM이 높으면 Solr 에 대해 걱정할 필요가 없습니다 .
Solr의 RAM 사용량은 약 10 억 개의 레코드가있는 경우 전체 색인을 생성하여 델타 수입품을 현명하게 활용하여이 상황을 해결할 수 있습니다. 설명했듯이 Solr 은 거의 실시간 솔루션 입니다.
Solr 는 확장 성이 뛰어납니다. SolrCloud를 살펴 보십시오 . 그것의 일부 주요 기능.
- 샤드 (또는 샤딩은 여러 머신에 인덱스를 분배하는 개념입니다. 예를 들어 인덱스가 너무 커지면)
- 부하 분산 ( Solrj 를 Solr 클라우드와 함께 사용하는 경우 라운드 로빈 메커니즘을 사용하여 부하 분산을 자동으로 처리합니다)
- 분산 검색
- 고 가용성
- "당신은 의미 했습니까?", 관련 검색 등과 같은 추가 기능
위 시나리오의 경우 Solr 로 압축 된 SpellCheckComponent 를 사용할 수 있습니다 . 많은 다른 기능이있다는 SnowballPorterFilterFactory는 기록을 입력 한 경우, 말을 검색하는 데 도움이 책 대신에 책이 , 당신은 관련 결과를 나타납니다 책 .
이 답변은 Apache Solr & MySQL 에 중점을 둡니다 . 장고는 범위를 벗어났습니다.
LINUX 환경에 있다고 가정하면이 기사를 계속 진행할 수 있습니다. (광산은 우분투 14.04 버전이었습니다)
자세한 설치
시작하기
여기 에서 Apache Solr 을 다운로드 하십시오 . 버전은 4.8.1 입니다. 새 버전을 다운로드 할 수 있습니다.
보관 파일을 다운로드 한 후 원하는 폴더로 추출하십시오. .. Downloads
또는 무엇이든 말하십시오. Downloads/solr-4.8.1/
프롬프트에서 .. 디렉토리 내부를 탐색하십시오.
shankar@shankar-lenovo: cd Downloads/solr-4.8.1
그래서 지금 당신은 여기에 있습니다 ..
shankar@shankar-lenovo: ~/Downloads/solr-4.8.1$
Jetty Application Server를 시작하십시오
Jetty 는 solr-4.8.1
디렉토리 의 examples 폴더에서 사용할 수 있으므로 해당 폴더를 탐색하여 Jetty Application Server를 시작하십시오.
shankar@shankar-lenovo:~/Downloads/solr-4.8.1/example$ java -jar start.jar
이제 터미널을 닫지 말고 최소화하고 옆에 두십시오.
(팁 : start.jar 다음에 &을 사용하여 Jetty 서버를 백그라운드에서 실행하십시오)
Apache Solr 이 성공적으로 실행 되는지 확인하려면 브라우저에서이 URL을 방문하십시오. http : // localhost : 8983 / solr
사용자 정의 포트에서 부두 실행
기본적으로 포트 8983에서 실행됩니다. 여기 또는 jetty.xml
파일 내에서 직접 포트를 변경할 수 있습니다 .
java -Djetty.port=9091 -jar start.jar
JConnector 다운로드
이 JAR 파일은 MySQL 과 JDBC를 연결하는 역할을합니다. 여기 에서 플랫폼 독립적 버전을 다운로드 하십시오.
다운로드 한 후 폴더를 추출하고를 복사 mysql-connector-java-5.1.31-bin.jar
하여 lib 디렉토리에 붙여 넣으십시오 .
shankar@shankar-lenovo:~/Downloads/solr-4.8.1/contrib/dataimporthandler/lib
Apache Solr에 링크 할 MySQL 테이블 작성
Solr 을 사용 하려면 검색 할 테이블과 데이터가 있어야합니다. 이를 위해 MySQL 을 사용 하여 테이블을 만들고 임의의 이름을 입력 한 다음 Solr 을 사용하여 MySQL 에 연결하고 해당 테이블과 항목을 색인화 할 수 있습니다 .
1. 테이블 구조
CREATE TABLE test_solr_mysql
(
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(45) NULL,
created TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
);
2. 위의 표를 채우십시오
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jean');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jack');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jason');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Vego');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Grunt');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jasper');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Fred');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jenna');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Rebecca');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Roland');
코어 내부로 들어가서 lib 지시문 추가
1.로 이동
shankar@shankar-lenovo: ~/Downloads/solr-4.8.1/example/solr/collection1/conf
2. solrconfig.xml 수정
이 두 지시문을이 파일에 추가하십시오.
<lib dir="../../../contrib/dataimporthandler/lib/" regex=".*\.jar" />
<lib dir="../../../dist/" regex="solr-dataimporthandler-\d.*\.jar" />
이제 DIH (데이터 가져 오기 핸들러)를 추가하십시오.
<requestHandler name="/dataimport"
class="org.apache.solr.handler.dataimport.DataImportHandler" >
<lst name="defaults">
<str name="config">db-data-config.xml</str>
</lst>
</requestHandler>
3. db-data-config.xml 파일을 작성하십시오
파일이 존재하면 무시하고 해당 파일에이 행을 추가하십시오. 첫 번째 줄에서 알 수 있듯이 MySQL 데이터베이스 의 자격 증명을 제공해야 합니다. 데이터베이스 이름, 사용자 이름 및 비밀번호
<dataConfig>
<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/yourdbname" user="dbuser" password="dbpass"/>
<document>
<entity name="test_solr" query="select CONCAT('test_solr-',id) as rid,name from test_solr_mysql WHERE '${dataimporter.request.clean}' != 'false'
OR `created` > '${dataimporter.last_index_time}'" >
<field name="id" column="rid" />
<field name="solr_name" column="name" />
</entity>
</document>
</dataConfig>
(팁 : 엔티티를 여러 개 가질 수 있지만 id 필드를 조심하십시오. 동일한 경우 인덱싱을 건너 뜁니다.)
4. schema.xml 파일 수정
표시된 대로 schema.xml에 추가하십시오 .
<uniqueKey>id</uniqueKey>
<field name="solr_name" type="string" indexed="true" stored="true" />
이행
인덱싱
이것은 실제 거래가있는 곳입니다. Solr Queries를 사용하려면 MySQL 에서 Solr 로 데이터를 인덱싱해야합니다 .
1 단계 : Solr 관리자 패널로 이동
브라우저 에서 URL http : // localhost : 8983 / solr 을 누르십시오 . 화면이 이렇게 열립니다.
마커가 나타내는대로 로깅 순서 로 이동 하여 위 구성 중 하나라도 오류가 있는지 확인하십시오.
2 단계 : 로그 확인
자, 이제 당신은 여기 있습니다. 당신이 할 수 있듯이 많은 노란색 메시지 (경고)가 있습니다. 빨간색으로 표시된 오류 메시지가 없는지 확인하십시오. 이전에는 구성에서 db-data-config.xml 에 선택 쿼리를 추가했습니다. 해당 쿼리에 오류가 있으면 여기에 표시되었을 것입니다.
좋아요, 오류 없습니다. 우리는 잘 지냅니다. 의 선택합시다 collection1 도시 된 바와 같이 목록에서를 선택 Dataimport을
3 단계 : DIH (데이터 가져 오기 핸들러)
다이 하이드로을 사용하여 연결됩니다 MySQL의 에서 SOLR 구성 파일을 통해 DB 데이터-config.xml 파일 로부터 SOLR의 인터페이스에 색인됩니다 데이터베이스에서 10 개 개의 레코드 검색 SOLR을 .
그러려면 full-import를 선택 하고 Clean and Commit 옵션을 선택 하십시오 . 이제 그림과 같이 실행 을 클릭하십시오 .
또는 이와 같이 직접 전체 가져 오기 쿼리를 사용할 수도 있습니다 .
http://localhost:8983/solr/collection1/dataimport?command=full-import&commit=true
당신이 클릭 한 후 실행 , SOLR는 어떤 오류가 있다면, 그것은 말할 것입니다, 인덱스 레코드를 시작 인덱싱 실패 하고 다시 가야 로깅 사라 잘못이 무엇을보고 절을 참조하십시오.
이 구성에 오류가없고 인덱싱이 성공적으로 완료되었다고 가정하면이 알림이 표시됩니다.
4 단계 : Solr 쿼리 실행
모든 것이 잘 된 것처럼 보이 므로 이제 Solr Queries를 사용하여 인덱싱 된 데이터를 쿼리 할 수 있습니다 . 왼쪽 에서 쿼리 를 클릭 한 다음 하단에서 실행 버튼 을 누릅니다 .
그림과 같이 색인화 된 레코드가 표시됩니다.
모든 레코드를 나열하기위한 해당 Solr 쿼리는
http://localhost:8983/solr/collection1/select?q=*:*&wt=json&indent=true
글쎄, 10 개의 색인화 된 레코드가있다. 예를 들어 Ja로 시작하는 이름 만 필요합니다 .이 경우 열 이름을 타겟팅해야하므로 solr_name
쿼리는 다음과 같습니다.
http://localhost:8983/solr/collection1/select?q=solr_name:Ja*&wt=json&indent=true
Solr Queries 를 작성하는 방법 입니다. 그것에 대해 더 읽으려면이 아름다운 기사를 확인 하십시오 .