SlideShare ist ein Scribd-Unternehmen logo
1 von 40
Apache Solr 소개




2012.06.29
윤도상
dsyoon@ncue.net
Solr 기능
 •   Schema
      –     색인할 문서의 필드와 그 필드 타입을 쉽게 정의
      –     Lucene의 Analyzer 사용
      –     Dynamic Field를 지원
      –     Copy Field를 사용하여 여러 field를 검색 가능한 단일 field로 묶을 수 있음
      –     외부 파일을 통해 금지어 등을 설정할 수 있다.
 •   Query
      –     HTTP 인터페이스로 XML/XSLT, JSON, Python, Ruby 와 같은 응답 포멧 설정
      –     쿼리와 필드 값에 근거한 Faceted Search 제공
      –     query로 검색 정렬을 정의 가능
      –     용이한 검색 score 설정
      –     query에 특정 field에 대한 가중치 부여 가능
 •   Core
      –     query handler와 확장 가능한 XML format
      –     unique key field에 기반하여 중복 문서 탐지
 •   Caching
      –     query 결과, 필터, 문서에 대한 캐시 설정
      –     사용자 수준에서의 캐시 설정 지원
 •   Replication
      –     rsync transport를 통해 효과적인 분산 색인
 •   Admin Interface
      –     cache, update, query 상태를 알려줌.
      –     Text Analyzer에 대한 디버거 제공
      –     웹 쿼리 인터페이스 제공




                                                                     2
Architecture
Overall Architecture




                       4
Component




            5
High Availability




                    6
Replication




              7
Configure
Schema.xml
 • Overall
       <schema>
         <types> … </types>
         <fields> … </fields>
         <uniqueKey />
         <solrQueryParser />
         <copyField />
         <dynamicField />
       </schema>




                                9
Schema.xml
 •    Type
 <types>
   <fieldType name="string" class="solr.StrField" sortMissingLast="true" />
   <fieldType name="int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0"/>
   <fieldType name="tint" class="solr.TrieIntField" precisionStep="8" positionIncrementGap="0"/>
   <fieldType name="date" class="solr.TrieDateField" omitNorms="true" precisionStep="0“ />
   <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
     <analyzer type="index">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt” />
        <filter class="solr.LowerCaseFilterFactory"/>
     </analyzer>
     <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true“ />
        <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>
   </fieldType>
 </types>




                                                                                                   10
Schema.xml
 •   Fields
      <fields>
        <field name="id" type="string" indexed="true" stored="true" required="true" />
        <field name=“release_dt" type="date" indexed="true" stored="true" />
        <field name="title" type="text_general" indexed="true" stored="true" />
        <field name=“content" type="text_general" indexed="true" stored="true" />
        <field name=“text" type="text_general" indexed="true" stored="true" />
      </fields>

 •   uniqueKey
      –   <uniqueKey>id</uniqueKey>
 •   solrQueryParser
      –   <solrQueryParser defaultOperator="OR"/>
 •   copyField
      –   <copyField source=“title" dest=“test"/>
      –   <copyField source=“content" dest=“test"/>
 •   dynamicField
      –   <dynamicField name="*_dt" type=“date" indexed="true" stored="true"/>
      –   <dynamicField name="*_text" type="string" indexed="true" stored="true"/>




                                                                                         11
Schema.xml
 • Example for bigram analyzer
    <fieldType name="text_cjk" class="solr.TextField" positionIncrementGap="100">
       <analyzer>
          <tokenizer class="solr.StandardTokenizerFactory"/>
          <filter class="solr.CJKWidthFilterFactory"/>
          <filter class="solr.LowerCaseFilterFactory"/>
          <filter class="solr.CJKBigramFilterFactory"/>
       </analyzer>
    </fieldType>


 • Dynamically Reload
    $curl „http://localhost:8983/solr/admin/cores?action=RELOAD&core=core0‟

    [예) $ curl 'http://localhost:8981/solr/admin/cores?action=RELOAD&core=news „]




                                                                                    12
Multi-Core
설정 파일
 1.   solr 디렉토리에 solr.xml 설정파일 수정
      <solr persistent="true" sharedLib="lib">
       <cores adminPath="/admin/cores" defaultCoreName=“core1">
        <core name=“core1" instanceDir=“core_dir1" />
        <core name=“core2" instanceDir=“core_dir2" />
       </cores>
      </solr>

 2.   solr 디렉토리에 core의 홈 디렉토리 생성
      - solr
               - core_dir1
               - core_dir2

 3.   생성한 각 디렉토리에 conf와 data 디렉토리를 생성한다.  data 경로는
      solrconfig.xml에서 아래와 같은 부분에서 설정할 수 있다.
      <dataDir>${solr.data.dir:}</dataDir>
      - solr
               - core_dir1
                     - conf
                     - data
               - core_dir2
                     - conf
                     - data
                                                                  14
Web Admin Interface
Web Admin Interface
  •   Config, Schema, Distribution 정보 조회
  •   Query Interface
  •   각종 통계
       –   Caches: lookups, hits, hitratio, inserts, evictions, size
       –   RequestHandlers: requests, errors
       –   UpdateHandler: adds, deletes, commits, optimizes
       –   IndexReader, open-time, index-version, numDocs, maxDocs
  •   Analysis Debugger
       –   각 분석 단계에 대한 결과를 보여줌
       –   쿼리와 색인에 대한 매치에 대한 정보를 보여줌




                                                                       16
Solr Document
XML
 • Document
      <add>                                                   <delete>
        <doc>                                                   <id>05991</id>
          <field name="employeeId">05991</field>                <id>06000</id>
          <field name="office">Bridgewater</field>              <query>office:Bridgewater</query>
          <field name="skills">Perl</field>                     <query>office:Osaka</query>
          <field name="skills">Java</field>                   </delete>
        </doc>
      </add>


 • Indexing
      $ curl http://localhost:8983/solr/update?commit=true -H “Content-Type: text/xml”            
                --data-binary ‘<add><doc><field name="id">testdoc</field></doc></add>’


 • Update
      $ curl http://localhost:8983/solr/update -H “Content-Type: text/xml”                                
             --data-binary ‘<add><doc boost="2.5“><field name="employeeId">05991</field>              
                            <field name="office" boost="2.0">Bridgewater</field> </doc> </add>’

 • Commit
      $ curl http://localhost:8983/solr/update -H “Content-Type: text/xml”        
              --data-binary ‘<commit waitFlush="false" waitSearcher="false"/>’




                                                                                                              18
Json
 • Document
       [
           { "id" : "MyTestDocument",
             "title" : "This is just a test“ }
       ]


 • Indexing
       $ curl http://localhost:8983/solr/update/json -H 'Content-type:application/json' -d   
              ' [ { "id" : "MyTestDocument", "title" : "This is just a test" } ]'


 • Update/Delete
       $ curl http://localhost:8983/solr/update/json -H 'Content-type:application/json' -d
              '{
                    "add": {"doc": {"id" : "TestDoc1", "title" : "test1"} },
                    "add": {"doc": {"id" : "TestDoc2", "title" : "another test“} },
                    “delete”: {"id" : "TestDoc1“ } },
                    “delete”: {“query" : “Test“, 'commitWithin':'500' } },
                 }'



 • Commit
       $ curl http://localhost:8983/solr/update?commit=true




                                                                                                 19
CVS
 • Document
      [test.cvs]                              [test.cvs]
      fieldnames=id,,category                 fieldnames=id,title,category
      100,”title”, ”This Value is "“food“”"   100,”title”, ”This Value is "“food“”"



 • Indexing
      $ curl http://localhost:8983/solr/update/csv --data-binary @test.csv -H 'Content-type:text/plain; charset=utf-8'




 • Example from Mysql Dump
      $ curl 'http://localhost:8983/solr/update/csv?commit=true&separator=%09&escape=&stream.file=/tmp/result.text‘




                                                                                                                         20
Data Handler Interface
Full-import

  • 테스트 DB 구성 예
       Create database solr;
       Grant alter, select, insert, update, delete on solr.* to solr@localhost identified by „solr‟;

       Create table maker (
                     mid int primary key auto_increment,
                     name varchar(30) not null,
                     lastmodified datetime );
       Create table product (
                     id int primary key auto_increment,
                     mid int not null,
                     name varchar(30) not null,
                     hname varchar(30) not null,
                     lastmodified datetime );

       Insert into maker(name, lastmodified) values('apple', '2012-05-11 17:00:00');
       Insert into maker(name, lastmodified) values('sony', '2012-05-11 17:00:00');
       Insert into maker(name, lastmodified) values('microsoft', '2012-05-11 17:00:00');

       Insert into product(mid, name, hname, lastmodified) values(1, 'iphone', '아이폰', '2012-05-11 17:00:00');
       Insert into product(mid, name, hname, lastmodified) values(1, 'ipod', '아아팟', '2012-05-11 17:00:00');
       Insert into product(mid, name, hname, lastmodified) values(1, 'ipad', '아이패드', '2012-05-11 17:00:00');
       Insert into product(mid, name, hname, lastmodified) values(2, 'walkman', '워크맨', '2012-05-11 17:00:00');
       Insert into product(mid, name, hname, lastmodified) values(2, 'vaio', '바이오', '2012-05-11 17:00:00');
       Insert into product(mid, name, hname, lastmodified) values(3, 'windowsxp', '윈도우xp', '2012-05-11 17:00:00');
       Insert into product(mid, name, hname, lastmodified) values(3, 'windowx7', '윈도우7', '2012-05-11 17:00:00');




                                                                                                                     22
Full-import

  • MYSQL Connection 설정
      – Solrconfig.xml 파일에서 db 설정 파일을 지정한다.
          <requestHandler name="/dataimport“ class="org.apache.solr.handler.dataimport.DataImportHandler">
             <lst name="defaults">
                <str name="config">db-data-config.xml</str>
             </lst>
          </requestHandler>


      – db-data-config.xml 파일에서 데이터에 대한 SQL문을 적용한다.
          <dataConfig>
            <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver”
                         url="jdbc:mysql://localhost/solr" user="solr" password="solr" name="solr"/>
            <document>
               <entity name="product" query="select id, mid, name from product">
                 <field column="id" name="pid" />
                 <field column="mid" name="mid" />
                 <field column="name" name="pname" />
                 <field column=“hname" name=“hname" />
                 <entity name="maker" query="select mid, name from maker where mid = '${product.mid}'">
                    <field column="mid" name="mid" />
                    <field column="name" name="mname" />
                 </entity>
               </entity>
            </document>
          </dataConfig>



                                                                                                             23
Full-import

  • 색인 설정
      – Shema.xml 파일에서 검색 필드를 설정
          <field name="pid" type="string" indexed="true" stored="true" required="true" />
          <field name="mid" type="int" indexed="true" stored="true" multiValued="false“ />
          <field name="pname" type="text" indexed="true" stored="true" multiValued="true“ />
          <field name="mname" type="text" indexed="true" stored="true" multiValued="true“ />
          ……..
          <defaultSearchField>pname</defaultSearchField>
          <defaultSearchField>mname</defaultSearchField>
          ……..
          <uniqueKey>pid</uniqueKey>
          ……..
          <copyField source="pname" dest="text"/>
          <copyField source="mname" dest="text"/>


      – Solr 실행
          java -Dsolr.solr.home="./example-DIH/solr/" -jar start.jar



      – 색인 실행
          http://localhost:8983/solr/db/dataimport?command=full-import




                                                                                               24
Delta-import

  • 테스트 DB 구성 예
      Insert into maker(name, lastmodified) values('Samsung', '2012-05-14 14:00:00');
      Insert into maker(name, lastmodified) values('LG', '2012-05-14 14:00:00');

      Insert into product(mid, name, hname, lastmodified) values(4, 'GalaxyS', '겔럭시S', '2012-05-14 14:00:00');
      Insert into product(mid, name, hname, lastmodified) values(4, 'GalaxyA', '겔럭시A', '2012-05-14 14:00:00');
      Insert into product(mid, name, hname, lastmodified) values(4, 'GalaxyNote', '겔럭시노트', '2012-05-14 14:00:00');
      Insert into product(mid, name, hname, lastmodified) values(5, 'OptimusLTE', '옵티머스LTE', '2012-05-14 14:00:00');
      Insert into product(mid, name, hname, lastmodified) values(5, 'VegaLTE', '베가LTE', '2012-05-14 14:00:00');




                                                                                                                25
Delta-import

  • MYSQL Connection 설정
      – db-data-config.xml 파일에서 데이터에 대한 SQL문을 적용한다.
        <dataConfig>
          <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver"
                      url="jdbc:mysql://localhost/solr" user="solr" password="solr" name="solr"/>
          <document>
             <entity name="product" pk="id“
                    query="select * from product“
                    deltaImportQuery="select * from product where id='${dataimporter.delta.id}'“
                    deltaQuery="select id from product where lastmodified > '${dataimporter.last_index_time}'">
               <field column="id" name="pid" />
               <field column="mid" name="mid" />
               <field column="name" name="pname" />
               <entity name="maker" pk="mid“
                       query="select mid from maker where mid='${product.mid}'">
                  <field column="mid" name="mid" />
                  <field column="name" name="mname" />
               </entity>
             </entity>
          </document>
        </dataConfig>


      – 색인 실행
        http://localhost:8983/solr/db/dataimport?command=delta-import




                                                                                                                  26
Index
Index
  •   기존 데이터를 모두 지움
        $ java -Durl=http://localhost:$port/solr/update/?commit=true
              -Ddata=args -jar $dir/post.jar "<delete><query>*:*</query></delete>"

  •   다음과 같이 post.jar 파일을 이용하여 색인함
        $ java -Durl=http://localhost:8983/solr/core1/update/?commit=true -jar post.jar core1_data.xml
        $ java -Durl=http://localhost:8983/solr/core2/update/?commit=true -jar post.jar core1_data.xml



  ※ 주의
        – 처음 색인 파일 생성시
               <doc>
                 <field name="id">id1</field>
                 <field name=“title“>title1</field>
               </doc>

        – 색인 파일 갱신시
               <update>
                 <doc>
                   <field name="id">id1</field>
                   <field name=“title“>title1</field>
                 </doc>
               </update>



                                                                                                         28
Search
Search Parameter
    Parameter   Default                             Description

   q                      검색 쿼리. 예) q=video 혹은 q=title:spiderman^10 text:spiderman

   start        0         검색된 결과 리스트에 대한 Offset

   rows         10        반환될 결과 문서 수

                          반환될 필드 (필드명은 comma로 구분)
   fl           *
                          예) fl=*,score 혹은 fl=id, name
   qf                     결과로써 제공받을 필드 지정. 예) q=superman&qf=title subject

                          오름/내림차순으로 검색할 필드 지정
   sort
                          예) sort=inStock asc, price desc 혹은 sort=price asc
   wt                     Writer type. 예) wt=json 혹은 wt=xml

                          필터 쿼리 지정 (결과내 검색 기능)
   fq
                          예) q=video&fq=superman
   hl                     하이라이트 필드 지정. 예) hl=true&hl.fl=name, description

                          Faceted Search
   facet                  예) facet=true&facet.field=cat
                            facet.query=price:[0 TO 100]&facet.query=price:[100 TO *]
   debugQuery             검색결과에 debug 결과를 추가해 보여줌


                                                                                        30
Query Examples
 •   mission이나 impossible이 포함되고 releaseDate로 내림차순 검색
     – q=mission impossible; releaseDate desc
 •   mission을 포함하고actor에 cruise가 포함되지 않은 문서를 검색
     – q=+mission –actor:cruise
 •   mission impossible이 붙고, actor에 cruise가 포함되지 않은 문서 검색
     – q=“mission impossible” –actor:cruise
 •   title에 spiderman을 description의 spiderman보다 10의 가중치 부여
     – q=title:spiderman^10 description:spiderman
 •   description필드에서 spiderman과 movie가 10단어 이내의 문서 검색
     – q=description:“spiderman movie”~10
 •   HDTV를 반드시 포함하고 weight이 40 이상인 문서를 검색
     – q=+HDTV +weight:[40 TO *]
 •   Wildcard queries
     •   q=te?t
     •   q=te*t
     •   q=test*



                                                             31
Search Relevancy




                   32
Faceted Browsing




                   33
Autocomplete
Suggest
 •   설정
     – Solrconfig.xml에 suggest 기능을 추가한다.
          <searchComponent name="suggest" class="solr.SpellCheckComponent">
            <lst name="spellchecker">
              <str name="name">suggest</str>
              <str name="classname">org.apache.solr.spelling.suggest.Suggester</str>
              <str name="lookupImpl">org.apache.solr.spelling.suggest.tst.TSTLookup</str>
              <str name="field">name_autocomplete</str>
            </lst>
          </searchComponent>
          <requestHandler name="/suggest" class="org.apache.solr.handler.component.SearchHandler">
            <lst name="defaults">
              <str name="spellcheck">true</str>
              <str name="spellcheck.dictionary">suggest</str>
              <str name="spellcheck.count">10</str>
            </lst>
            <arr name="components">
              <str>suggest</str>
            </arr>
          </requestHandler>




                                                                                                     35
Suggest
 •    설정
       – Shema.xml에 suggest 필드를 추가한다.
            <fieldType name="text_auto" class="solr.TextField" positionIncrementGap="100">
              <analyzer>
                 <tokenizer class="solr.WhitespaceTokenizerFactory"/>
                 <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1” generateNumberParts="1"
                         catenateWords="1" catenateNumbers="1" catenateAll="0” splitOnCaseChange="1"/>
                 <filter class="solr.LowerCaseFilterFactory"/>
              </analyzer>
            </fieldType>
            <field name="name_autocomplete" type="text_auto" indexed="true" stored="true” multiValued="false" />
            <copyField source="name" dest="name_autocomplete" />


 •    검색 실행 (http://localhost:8983/solr/db/suggest?spellcheck.build=true)

     http://localhost:8983/solr/db/suggest?q=겔              http://localhost:8983/solr/db/suggest?q=윈도




                                                                                                                   36
Basic Dictionary
- 동의어/불용어 사전-
동의어 사전
 • 항목 (synonyms.txt)
      Window => windowxp window7 window8
      window 7, door

 • 테스트 쿼리 [Query: window 7]




                                           38
동의어 사전
 • 테스트 쿼리 [Query: window]




 • 테스트 쿼리 [Query: door]




                            39
불용어 사전
 • 항목 (stopwords.txt)
      Window
 • 테스트 쿼리 [Query: window 7]




 • 테스트 쿼리 [Query: window]


 • 테스트 쿼리 [Query: door]




                              40

Weitere ähnliche Inhalte

Was ist angesagt?

Ch1 일래스틱서치 클러스터 시작
Ch1 일래스틱서치 클러스터 시작Ch1 일래스틱서치 클러스터 시작
Ch1 일래스틱서치 클러스터 시작Minchul Jung
 
엘라스틱 서치 세미나
엘라스틱 서치 세미나엘라스틱 서치 세미나
엘라스틱 서치 세미나종현 김
 
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항Minchul Jung
 
Elasticsearch server Chapter5
Elasticsearch server Chapter5Elasticsearch server Chapter5
Elasticsearch server Chapter5Mungyu Choi
 
Meteor Elasticsearch 연동 Trial
Meteor Elasticsearch 연동 TrialMeteor Elasticsearch 연동 Trial
Meteor Elasticsearch 연동 TrialSangwon Lee
 
검색 서비스 간략 교육
검색 서비스 간략 교육 검색 서비스 간략 교육
검색 서비스 간략 교육 Rjs Ryu
 
Logstash, ElasticSearch, Kibana
Logstash, ElasticSearch, KibanaLogstash, ElasticSearch, Kibana
Logstash, ElasticSearch, KibanaHyeonSeok Choi
 
검색엔진이 데이터를 다루는 법 김종민
검색엔진이 데이터를 다루는 법 김종민검색엔진이 데이터를 다루는 법 김종민
검색엔진이 데이터를 다루는 법 김종민종민 김
 
Fundamental of ELK Stack
Fundamental of ELK StackFundamental of ELK Stack
Fundamental of ELK Stack주표 홍
 
Mongo DB로 진행하는 CRUD
Mongo DB로 진행하는 CRUDMongo DB로 진행하는 CRUD
Mongo DB로 진행하는 CRUDJin wook
 
20151022 elasticsearch 적용및활용_송준이_sds발표용
20151022 elasticsearch 적용및활용_송준이_sds발표용20151022 elasticsearch 적용및활용_송준이_sds발표용
20151022 elasticsearch 적용및활용_송준이_sds발표용Junyi Song
 
Mongo DB 성능최적화 전략
Mongo DB 성능최적화 전략Mongo DB 성능최적화 전략
Mongo DB 성능최적화 전략Jin wook
 
5-4. html5 offline and storage
5-4. html5 offline and storage5-4. html5 offline and storage
5-4. html5 offline and storageJinKyoungHeo
 
Mongo db 활용 가이드 ch7
Mongo db 활용 가이드 ch7Mongo db 활용 가이드 ch7
Mongo db 활용 가이드 ch7주영 송
 
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'sung ki choi
 
5-3. html5 device access
5-3. html5 device access5-3. html5 device access
5-3. html5 device accessJinKyoungHeo
 
Web server page_ed10
Web server page_ed10Web server page_ed10
Web server page_ed10hungrok
 
Ajax 기술문서 - 김연수
Ajax 기술문서 - 김연수Ajax 기술문서 - 김연수
Ajax 기술문서 - 김연수Yeon Soo Kim
 
Ksug2015 jpa5 스프링과jpa
Ksug2015 jpa5 스프링과jpaKsug2015 jpa5 스프링과jpa
Ksug2015 jpa5 스프링과jpaYounghan Kim
 

Was ist angesagt? (20)

Ch1 일래스틱서치 클러스터 시작
Ch1 일래스틱서치 클러스터 시작Ch1 일래스틱서치 클러스터 시작
Ch1 일래스틱서치 클러스터 시작
 
엘라스틱 서치 세미나
엘라스틱 서치 세미나엘라스틱 서치 세미나
엘라스틱 서치 세미나
 
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
 
Elasticsearch server Chapter5
Elasticsearch server Chapter5Elasticsearch server Chapter5
Elasticsearch server Chapter5
 
Meteor Elasticsearch 연동 Trial
Meteor Elasticsearch 연동 TrialMeteor Elasticsearch 연동 Trial
Meteor Elasticsearch 연동 Trial
 
검색 서비스 간략 교육
검색 서비스 간략 교육 검색 서비스 간략 교육
검색 서비스 간략 교육
 
Logstash, ElasticSearch, Kibana
Logstash, ElasticSearch, KibanaLogstash, ElasticSearch, Kibana
Logstash, ElasticSearch, Kibana
 
검색엔진이 데이터를 다루는 법 김종민
검색엔진이 데이터를 다루는 법 김종민검색엔진이 데이터를 다루는 법 김종민
검색엔진이 데이터를 다루는 법 김종민
 
Fundamental of ELK Stack
Fundamental of ELK StackFundamental of ELK Stack
Fundamental of ELK Stack
 
Mongo DB로 진행하는 CRUD
Mongo DB로 진행하는 CRUDMongo DB로 진행하는 CRUD
Mongo DB로 진행하는 CRUD
 
20151022 elasticsearch 적용및활용_송준이_sds발표용
20151022 elasticsearch 적용및활용_송준이_sds발표용20151022 elasticsearch 적용및활용_송준이_sds발표용
20151022 elasticsearch 적용및활용_송준이_sds발표용
 
Mongo DB 성능최적화 전략
Mongo DB 성능최적화 전략Mongo DB 성능최적화 전략
Mongo DB 성능최적화 전략
 
5-4. html5 offline and storage
5-4. html5 offline and storage5-4. html5 offline and storage
5-4. html5 offline and storage
 
elasticsearch
elasticsearchelasticsearch
elasticsearch
 
Mongo db 활용 가이드 ch7
Mongo db 활용 가이드 ch7Mongo db 활용 가이드 ch7
Mongo db 활용 가이드 ch7
 
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'
 
5-3. html5 device access
5-3. html5 device access5-3. html5 device access
5-3. html5 device access
 
Web server page_ed10
Web server page_ed10Web server page_ed10
Web server page_ed10
 
Ajax 기술문서 - 김연수
Ajax 기술문서 - 김연수Ajax 기술문서 - 김연수
Ajax 기술문서 - 김연수
 
Ksug2015 jpa5 스프링과jpa
Ksug2015 jpa5 스프링과jpaKsug2015 jpa5 스프링과jpa
Ksug2015 jpa5 스프링과jpa
 

Andere mochten auch

[제1회 루씬 한글분석기 기술세미나] solr로 나만의 검색엔진을 만들어보자
[제1회 루씬 한글분석기 기술세미나] solr로 나만의 검색엔진을 만들어보자[제1회 루씬 한글분석기 기술세미나] solr로 나만의 검색엔진을 만들어보자
[제1회 루씬 한글분석기 기술세미나] solr로 나만의 검색엔진을 만들어보자Donghyeok Kang
 
검색엔진 오픈 소스 Lucene
검색엔진 오픈 소스 Lucene검색엔진 오픈 소스 Lucene
검색엔진 오픈 소스 LuceneEunGi Hong
 
[경북] I'mcloud openlight
[경북] I'mcloud openlight[경북] I'mcloud openlight
[경북] I'mcloud openlightstartupkorea
 
정보검색의개요
정보검색의개요정보검색의개요
정보검색의개요Dosang Yoon
 
Enterprise Search Using Apache Solr
Enterprise Search Using Apache SolrEnterprise Search Using Apache Solr
Enterprise Search Using Apache Solrsagar chaturvedi
 
[경북] I'mcloud opensight
[경북] I'mcloud opensight[경북] I'mcloud opensight
[경북] I'mcloud opensightstartupkorea
 
Introduction To Kibana
Introduction To KibanaIntroduction To Kibana
Introduction To KibanaJen Stirrup
 
[경북] I'mcloud information
[경북] I'mcloud information[경북] I'mcloud information
[경북] I'mcloud informationstartupkorea
 
Elasticsearch 설치 및 기본 활용
Elasticsearch 설치 및 기본 활용Elasticsearch 설치 및 기본 활용
Elasticsearch 설치 및 기본 활용종민 김
 
Real Time BOM Explosions with Apache Solr and Spark
Real Time BOM Explosions with Apache Solr and SparkReal Time BOM Explosions with Apache Solr and Spark
Real Time BOM Explosions with Apache Solr and SparkQAware GmbH
 
Logging with Elasticsearch, Logstash & Kibana
Logging with Elasticsearch, Logstash & KibanaLogging with Elasticsearch, Logstash & Kibana
Logging with Elasticsearch, Logstash & KibanaAmazee Labs
 
Attack monitoring using ElasticSearch Logstash and Kibana
Attack monitoring using ElasticSearch Logstash and KibanaAttack monitoring using ElasticSearch Logstash and Kibana
Attack monitoring using ElasticSearch Logstash and KibanaPrajal Kulkarni
 

Andere mochten auch (16)

[제1회 루씬 한글분석기 기술세미나] solr로 나만의 검색엔진을 만들어보자
[제1회 루씬 한글분석기 기술세미나] solr로 나만의 검색엔진을 만들어보자[제1회 루씬 한글분석기 기술세미나] solr로 나만의 검색엔진을 만들어보자
[제1회 루씬 한글분석기 기술세미나] solr로 나만의 검색엔진을 만들어보자
 
검색엔진 오픈 소스 Lucene
검색엔진 오픈 소스 Lucene검색엔진 오픈 소스 Lucene
검색엔진 오픈 소스 Lucene
 
[경북] I'mcloud openlight
[경북] I'mcloud openlight[경북] I'mcloud openlight
[경북] I'mcloud openlight
 
정보검색의개요
정보검색의개요정보검색의개요
정보검색의개요
 
Enterprise Search Using Apache Solr
Enterprise Search Using Apache SolrEnterprise Search Using Apache Solr
Enterprise Search Using Apache Solr
 
[경북] I'mcloud opensight
[경북] I'mcloud opensight[경북] I'mcloud opensight
[경북] I'mcloud opensight
 
Kibana
KibanaKibana
Kibana
 
Introduction To Kibana
Introduction To KibanaIntroduction To Kibana
Introduction To Kibana
 
[경북] I'mcloud information
[경북] I'mcloud information[경북] I'mcloud information
[경북] I'mcloud information
 
Flume 훑어보기
Flume 훑어보기Flume 훑어보기
Flume 훑어보기
 
Elasticsearch 설치 및 기본 활용
Elasticsearch 설치 및 기본 활용Elasticsearch 설치 및 기본 활용
Elasticsearch 설치 및 기본 활용
 
Real Time BOM Explosions with Apache Solr and Spark
Real Time BOM Explosions with Apache Solr and SparkReal Time BOM Explosions with Apache Solr and Spark
Real Time BOM Explosions with Apache Solr and Spark
 
Chef 소개
Chef 소개Chef 소개
Chef 소개
 
Logging with Elasticsearch, Logstash & Kibana
Logging with Elasticsearch, Logstash & KibanaLogging with Elasticsearch, Logstash & Kibana
Logging with Elasticsearch, Logstash & Kibana
 
Using Logstash, elasticsearch & kibana
Using Logstash, elasticsearch & kibanaUsing Logstash, elasticsearch & kibana
Using Logstash, elasticsearch & kibana
 
Attack monitoring using ElasticSearch Logstash and Kibana
Attack monitoring using ElasticSearch Logstash and KibanaAttack monitoring using ElasticSearch Logstash and Kibana
Attack monitoring using ElasticSearch Logstash and Kibana
 

Ähnlich wie Apache solr소개 20120629

[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)
[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)
[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)Sang Don Kim
 
Kubernetes & helm 활용
Kubernetes & helm 활용Kubernetes & helm 활용
Kubernetes & helm 활용SK Telecom
 
(120128) #fitalk sql server forensics
(120128) #fitalk   sql server forensics(120128) #fitalk   sql server forensics
(120128) #fitalk sql server forensicsINSIGHT FORENSIC
 
02.실행환경 실습교재(데이터처리)
02.실행환경 실습교재(데이터처리)02.실행환경 실습교재(데이터처리)
02.실행환경 실습교재(데이터처리)Hankyo
 
Partner Story(Megazone): 금융사 실전 프로젝트 DeepDive
Partner Story(Megazone): 금융사 실전 프로젝트 DeepDive Partner Story(Megazone): 금융사 실전 프로젝트 DeepDive
Partner Story(Megazone): 금융사 실전 프로젝트 DeepDive Elasticsearch
 
vine webdev
vine webdevvine webdev
vine webdevdcfc1997
 
처음배우는 자바스크립트, 제이쿼리 #4
처음배우는 자바스크립트, 제이쿼리 #4처음배우는 자바스크립트, 제이쿼리 #4
처음배우는 자바스크립트, 제이쿼리 #4성일 한
 
XE 레이아웃 제작 실무 노하우 1 - XECon2014 by 고진화
XE 레이아웃 제작 실무 노하우 1 - XECon2014 by 고진화XE 레이아웃 제작 실무 노하우 1 - XECon2014 by 고진화
XE 레이아웃 제작 실무 노하우 1 - XECon2014 by 고진화Jinhwa Ko
 
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)DK Lee
 
15. Application - Solr Indexing & Searching
15. Application - Solr Indexing & Searching15. Application - Solr Indexing & Searching
15. Application - Solr Indexing & Searchingmerry7
 
Jstl_GETCHA_HANJUNG
Jstl_GETCHA_HANJUNGJstl_GETCHA_HANJUNG
Jstl_GETCHA_HANJUNGJung Han
 
Node.js and react
Node.js and reactNode.js and react
Node.js and reactHyungKuIm
 

Ähnlich wie Apache solr소개 20120629 (20)

[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)
[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)
[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)
 
Html5
Html5 Html5
Html5
 
Html5 performance
Html5 performanceHtml5 performance
Html5 performance
 
테스트
테스트테스트
테스트
 
Kubernetes & helm 활용
Kubernetes & helm 활용Kubernetes & helm 활용
Kubernetes & helm 활용
 
(120128) #fitalk sql server forensics
(120128) #fitalk   sql server forensics(120128) #fitalk   sql server forensics
(120128) #fitalk sql server forensics
 
02.실행환경 실습교재(데이터처리)
02.실행환경 실습교재(데이터처리)02.실행환경 실습교재(데이터처리)
02.실행환경 실습교재(데이터처리)
 
Partner Story(Megazone): 금융사 실전 프로젝트 DeepDive
Partner Story(Megazone): 금융사 실전 프로젝트 DeepDive Partner Story(Megazone): 금융사 실전 프로젝트 DeepDive
Partner Story(Megazone): 금융사 실전 프로젝트 DeepDive
 
vine webdev
vine webdevvine webdev
vine webdev
 
Hacosa jquery 1th
Hacosa jquery 1thHacosa jquery 1th
Hacosa jquery 1th
 
처음배우는 자바스크립트, 제이쿼리 #4
처음배우는 자바스크립트, 제이쿼리 #4처음배우는 자바스크립트, 제이쿼리 #4
처음배우는 자바스크립트, 제이쿼리 #4
 
XE 레이아웃 제작 실무 노하우 1 - XECon2014 by 고진화
XE 레이아웃 제작 실무 노하우 1 - XECon2014 by 고진화XE 레이아웃 제작 실무 노하우 1 - XECon2014 by 고진화
XE 레이아웃 제작 실무 노하우 1 - XECon2014 by 고진화
 
Scala for play
Scala for playScala for play
Scala for play
 
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
 
15. Application - Solr Indexing & Searching
15. Application - Solr Indexing & Searching15. Application - Solr Indexing & Searching
15. Application - Solr Indexing & Searching
 
4-3. jquery
4-3. jquery4-3. jquery
4-3. jquery
 
Jstl_GETCHA_HANJUNG
Jstl_GETCHA_HANJUNGJstl_GETCHA_HANJUNG
Jstl_GETCHA_HANJUNG
 
Node.js and react
Node.js and reactNode.js and react
Node.js and react
 
Spring boot actuator
Spring boot   actuatorSpring boot   actuator
Spring boot actuator
 
Xe hack
Xe hackXe hack
Xe hack
 

Apache solr소개 20120629

  • 2. Solr 기능 • Schema – 색인할 문서의 필드와 그 필드 타입을 쉽게 정의 – Lucene의 Analyzer 사용 – Dynamic Field를 지원 – Copy Field를 사용하여 여러 field를 검색 가능한 단일 field로 묶을 수 있음 – 외부 파일을 통해 금지어 등을 설정할 수 있다. • Query – HTTP 인터페이스로 XML/XSLT, JSON, Python, Ruby 와 같은 응답 포멧 설정 – 쿼리와 필드 값에 근거한 Faceted Search 제공 – query로 검색 정렬을 정의 가능 – 용이한 검색 score 설정 – query에 특정 field에 대한 가중치 부여 가능 • Core – query handler와 확장 가능한 XML format – unique key field에 기반하여 중복 문서 탐지 • Caching – query 결과, 필터, 문서에 대한 캐시 설정 – 사용자 수준에서의 캐시 설정 지원 • Replication – rsync transport를 통해 효과적인 분산 색인 • Admin Interface – cache, update, query 상태를 알려줌. – Text Analyzer에 대한 디버거 제공 – 웹 쿼리 인터페이스 제공 2
  • 9. Schema.xml • Overall <schema> <types> … </types> <fields> … </fields> <uniqueKey /> <solrQueryParser /> <copyField /> <dynamicField /> </schema> 9
  • 10. Schema.xml • Type <types> <fieldType name="string" class="solr.StrField" sortMissingLast="true" /> <fieldType name="int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0"/> <fieldType name="tint" class="solr.TrieIntField" precisionStep="8" positionIncrementGap="0"/> <fieldType name="date" class="solr.TrieDateField" omitNorms="true" precisionStep="0“ /> <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"> <analyzer type="index"> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt” /> <filter class="solr.LowerCaseFilterFactory"/> </analyzer> <analyzer type="query"> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true“ /> <filter class="solr.LowerCaseFilterFactory"/> </analyzer> </fieldType> </types> 10
  • 11. Schema.xml • Fields <fields> <field name="id" type="string" indexed="true" stored="true" required="true" /> <field name=“release_dt" type="date" indexed="true" stored="true" /> <field name="title" type="text_general" indexed="true" stored="true" /> <field name=“content" type="text_general" indexed="true" stored="true" /> <field name=“text" type="text_general" indexed="true" stored="true" /> </fields> • uniqueKey – <uniqueKey>id</uniqueKey> • solrQueryParser – <solrQueryParser defaultOperator="OR"/> • copyField – <copyField source=“title" dest=“test"/> – <copyField source=“content" dest=“test"/> • dynamicField – <dynamicField name="*_dt" type=“date" indexed="true" stored="true"/> – <dynamicField name="*_text" type="string" indexed="true" stored="true"/> 11
  • 12. Schema.xml • Example for bigram analyzer <fieldType name="text_cjk" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.CJKWidthFilterFactory"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.CJKBigramFilterFactory"/> </analyzer> </fieldType> • Dynamically Reload $curl „http://localhost:8983/solr/admin/cores?action=RELOAD&core=core0‟ [예) $ curl 'http://localhost:8981/solr/admin/cores?action=RELOAD&core=news „] 12
  • 14. 설정 파일 1. solr 디렉토리에 solr.xml 설정파일 수정 <solr persistent="true" sharedLib="lib"> <cores adminPath="/admin/cores" defaultCoreName=“core1"> <core name=“core1" instanceDir=“core_dir1" /> <core name=“core2" instanceDir=“core_dir2" /> </cores> </solr> 2. solr 디렉토리에 core의 홈 디렉토리 생성 - solr - core_dir1 - core_dir2 3. 생성한 각 디렉토리에 conf와 data 디렉토리를 생성한다.  data 경로는 solrconfig.xml에서 아래와 같은 부분에서 설정할 수 있다. <dataDir>${solr.data.dir:}</dataDir> - solr - core_dir1 - conf - data - core_dir2 - conf - data 14
  • 16. Web Admin Interface • Config, Schema, Distribution 정보 조회 • Query Interface • 각종 통계 – Caches: lookups, hits, hitratio, inserts, evictions, size – RequestHandlers: requests, errors – UpdateHandler: adds, deletes, commits, optimizes – IndexReader, open-time, index-version, numDocs, maxDocs • Analysis Debugger – 각 분석 단계에 대한 결과를 보여줌 – 쿼리와 색인에 대한 매치에 대한 정보를 보여줌 16
  • 18. XML • Document <add> <delete> <doc> <id>05991</id> <field name="employeeId">05991</field> <id>06000</id> <field name="office">Bridgewater</field> <query>office:Bridgewater</query> <field name="skills">Perl</field> <query>office:Osaka</query> <field name="skills">Java</field> </delete> </doc> </add> • Indexing $ curl http://localhost:8983/solr/update?commit=true -H “Content-Type: text/xml” --data-binary ‘<add><doc><field name="id">testdoc</field></doc></add>’ • Update $ curl http://localhost:8983/solr/update -H “Content-Type: text/xml” --data-binary ‘<add><doc boost="2.5“><field name="employeeId">05991</field> <field name="office" boost="2.0">Bridgewater</field> </doc> </add>’ • Commit $ curl http://localhost:8983/solr/update -H “Content-Type: text/xml” --data-binary ‘<commit waitFlush="false" waitSearcher="false"/>’ 18
  • 19. Json • Document [ { "id" : "MyTestDocument", "title" : "This is just a test“ } ] • Indexing $ curl http://localhost:8983/solr/update/json -H 'Content-type:application/json' -d ' [ { "id" : "MyTestDocument", "title" : "This is just a test" } ]' • Update/Delete $ curl http://localhost:8983/solr/update/json -H 'Content-type:application/json' -d '{ "add": {"doc": {"id" : "TestDoc1", "title" : "test1"} }, "add": {"doc": {"id" : "TestDoc2", "title" : "another test“} }, “delete”: {"id" : "TestDoc1“ } }, “delete”: {“query" : “Test“, 'commitWithin':'500' } }, }' • Commit $ curl http://localhost:8983/solr/update?commit=true 19
  • 20. CVS • Document [test.cvs] [test.cvs] fieldnames=id,,category fieldnames=id,title,category 100,”title”, ”This Value is "“food“”" 100,”title”, ”This Value is "“food“”" • Indexing $ curl http://localhost:8983/solr/update/csv --data-binary @test.csv -H 'Content-type:text/plain; charset=utf-8' • Example from Mysql Dump $ curl 'http://localhost:8983/solr/update/csv?commit=true&separator=%09&escape=&stream.file=/tmp/result.text‘ 20
  • 22. Full-import • 테스트 DB 구성 예 Create database solr; Grant alter, select, insert, update, delete on solr.* to solr@localhost identified by „solr‟; Create table maker ( mid int primary key auto_increment, name varchar(30) not null, lastmodified datetime ); Create table product ( id int primary key auto_increment, mid int not null, name varchar(30) not null, hname varchar(30) not null, lastmodified datetime ); Insert into maker(name, lastmodified) values('apple', '2012-05-11 17:00:00'); Insert into maker(name, lastmodified) values('sony', '2012-05-11 17:00:00'); Insert into maker(name, lastmodified) values('microsoft', '2012-05-11 17:00:00'); Insert into product(mid, name, hname, lastmodified) values(1, 'iphone', '아이폰', '2012-05-11 17:00:00'); Insert into product(mid, name, hname, lastmodified) values(1, 'ipod', '아아팟', '2012-05-11 17:00:00'); Insert into product(mid, name, hname, lastmodified) values(1, 'ipad', '아이패드', '2012-05-11 17:00:00'); Insert into product(mid, name, hname, lastmodified) values(2, 'walkman', '워크맨', '2012-05-11 17:00:00'); Insert into product(mid, name, hname, lastmodified) values(2, 'vaio', '바이오', '2012-05-11 17:00:00'); Insert into product(mid, name, hname, lastmodified) values(3, 'windowsxp', '윈도우xp', '2012-05-11 17:00:00'); Insert into product(mid, name, hname, lastmodified) values(3, 'windowx7', '윈도우7', '2012-05-11 17:00:00'); 22
  • 23. Full-import • MYSQL Connection 설정 – Solrconfig.xml 파일에서 db 설정 파일을 지정한다. <requestHandler name="/dataimport“ class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <str name="config">db-data-config.xml</str> </lst> </requestHandler> – db-data-config.xml 파일에서 데이터에 대한 SQL문을 적용한다. <dataConfig> <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver” url="jdbc:mysql://localhost/solr" user="solr" password="solr" name="solr"/> <document> <entity name="product" query="select id, mid, name from product"> <field column="id" name="pid" /> <field column="mid" name="mid" /> <field column="name" name="pname" /> <field column=“hname" name=“hname" /> <entity name="maker" query="select mid, name from maker where mid = '${product.mid}'"> <field column="mid" name="mid" /> <field column="name" name="mname" /> </entity> </entity> </document> </dataConfig> 23
  • 24. Full-import • 색인 설정 – Shema.xml 파일에서 검색 필드를 설정 <field name="pid" type="string" indexed="true" stored="true" required="true" /> <field name="mid" type="int" indexed="true" stored="true" multiValued="false“ /> <field name="pname" type="text" indexed="true" stored="true" multiValued="true“ /> <field name="mname" type="text" indexed="true" stored="true" multiValued="true“ /> …….. <defaultSearchField>pname</defaultSearchField> <defaultSearchField>mname</defaultSearchField> …….. <uniqueKey>pid</uniqueKey> …….. <copyField source="pname" dest="text"/> <copyField source="mname" dest="text"/> – Solr 실행 java -Dsolr.solr.home="./example-DIH/solr/" -jar start.jar – 색인 실행 http://localhost:8983/solr/db/dataimport?command=full-import 24
  • 25. Delta-import • 테스트 DB 구성 예 Insert into maker(name, lastmodified) values('Samsung', '2012-05-14 14:00:00'); Insert into maker(name, lastmodified) values('LG', '2012-05-14 14:00:00'); Insert into product(mid, name, hname, lastmodified) values(4, 'GalaxyS', '겔럭시S', '2012-05-14 14:00:00'); Insert into product(mid, name, hname, lastmodified) values(4, 'GalaxyA', '겔럭시A', '2012-05-14 14:00:00'); Insert into product(mid, name, hname, lastmodified) values(4, 'GalaxyNote', '겔럭시노트', '2012-05-14 14:00:00'); Insert into product(mid, name, hname, lastmodified) values(5, 'OptimusLTE', '옵티머스LTE', '2012-05-14 14:00:00'); Insert into product(mid, name, hname, lastmodified) values(5, 'VegaLTE', '베가LTE', '2012-05-14 14:00:00'); 25
  • 26. Delta-import • MYSQL Connection 설정 – db-data-config.xml 파일에서 데이터에 대한 SQL문을 적용한다. <dataConfig> <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/solr" user="solr" password="solr" name="solr"/> <document> <entity name="product" pk="id“ query="select * from product“ deltaImportQuery="select * from product where id='${dataimporter.delta.id}'“ deltaQuery="select id from product where lastmodified > '${dataimporter.last_index_time}'"> <field column="id" name="pid" /> <field column="mid" name="mid" /> <field column="name" name="pname" /> <entity name="maker" pk="mid“ query="select mid from maker where mid='${product.mid}'"> <field column="mid" name="mid" /> <field column="name" name="mname" /> </entity> </entity> </document> </dataConfig> – 색인 실행 http://localhost:8983/solr/db/dataimport?command=delta-import 26
  • 27. Index
  • 28. Index • 기존 데이터를 모두 지움 $ java -Durl=http://localhost:$port/solr/update/?commit=true -Ddata=args -jar $dir/post.jar "<delete><query>*:*</query></delete>" • 다음과 같이 post.jar 파일을 이용하여 색인함 $ java -Durl=http://localhost:8983/solr/core1/update/?commit=true -jar post.jar core1_data.xml $ java -Durl=http://localhost:8983/solr/core2/update/?commit=true -jar post.jar core1_data.xml ※ 주의 – 처음 색인 파일 생성시 <doc> <field name="id">id1</field> <field name=“title“>title1</field> </doc> – 색인 파일 갱신시 <update> <doc> <field name="id">id1</field> <field name=“title“>title1</field> </doc> </update> 28
  • 30. Search Parameter Parameter Default Description q 검색 쿼리. 예) q=video 혹은 q=title:spiderman^10 text:spiderman start 0 검색된 결과 리스트에 대한 Offset rows 10 반환될 결과 문서 수 반환될 필드 (필드명은 comma로 구분) fl * 예) fl=*,score 혹은 fl=id, name qf 결과로써 제공받을 필드 지정. 예) q=superman&qf=title subject 오름/내림차순으로 검색할 필드 지정 sort 예) sort=inStock asc, price desc 혹은 sort=price asc wt Writer type. 예) wt=json 혹은 wt=xml 필터 쿼리 지정 (결과내 검색 기능) fq 예) q=video&fq=superman hl 하이라이트 필드 지정. 예) hl=true&hl.fl=name, description Faceted Search facet 예) facet=true&facet.field=cat facet.query=price:[0 TO 100]&facet.query=price:[100 TO *] debugQuery 검색결과에 debug 결과를 추가해 보여줌 30
  • 31. Query Examples • mission이나 impossible이 포함되고 releaseDate로 내림차순 검색 – q=mission impossible; releaseDate desc • mission을 포함하고actor에 cruise가 포함되지 않은 문서를 검색 – q=+mission –actor:cruise • mission impossible이 붙고, actor에 cruise가 포함되지 않은 문서 검색 – q=“mission impossible” –actor:cruise • title에 spiderman을 description의 spiderman보다 10의 가중치 부여 – q=title:spiderman^10 description:spiderman • description필드에서 spiderman과 movie가 10단어 이내의 문서 검색 – q=description:“spiderman movie”~10 • HDTV를 반드시 포함하고 weight이 40 이상인 문서를 검색 – q=+HDTV +weight:[40 TO *] • Wildcard queries • q=te?t • q=te*t • q=test* 31
  • 35. Suggest • 설정 – Solrconfig.xml에 suggest 기능을 추가한다. <searchComponent name="suggest" class="solr.SpellCheckComponent"> <lst name="spellchecker"> <str name="name">suggest</str> <str name="classname">org.apache.solr.spelling.suggest.Suggester</str> <str name="lookupImpl">org.apache.solr.spelling.suggest.tst.TSTLookup</str> <str name="field">name_autocomplete</str> </lst> </searchComponent> <requestHandler name="/suggest" class="org.apache.solr.handler.component.SearchHandler"> <lst name="defaults"> <str name="spellcheck">true</str> <str name="spellcheck.dictionary">suggest</str> <str name="spellcheck.count">10</str> </lst> <arr name="components"> <str>suggest</str> </arr> </requestHandler> 35
  • 36. Suggest • 설정 – Shema.xml에 suggest 필드를 추가한다. <fieldType name="text_auto" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="solr.WhitespaceTokenizerFactory"/> <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1” generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0” splitOnCaseChange="1"/> <filter class="solr.LowerCaseFilterFactory"/> </analyzer> </fieldType> <field name="name_autocomplete" type="text_auto" indexed="true" stored="true” multiValued="false" /> <copyField source="name" dest="name_autocomplete" /> • 검색 실행 (http://localhost:8983/solr/db/suggest?spellcheck.build=true) http://localhost:8983/solr/db/suggest?q=겔 http://localhost:8983/solr/db/suggest?q=윈도 36
  • 38. 동의어 사전 • 항목 (synonyms.txt) Window => windowxp window7 window8 window 7, door • 테스트 쿼리 [Query: window 7] 38
  • 39. 동의어 사전 • 테스트 쿼리 [Query: window] • 테스트 쿼리 [Query: door] 39
  • 40. 불용어 사전 • 항목 (stopwords.txt) Window • 테스트 쿼리 [Query: window 7] • 테스트 쿼리 [Query: window] • 테스트 쿼리 [Query: door] 40