## 목차 ##



## 1. 검색 방법 ##

아래의 데이터를 색인했다 가정하고 Java solrj(Solr Client API)를 사용해서 검색을 해보자.


id,phone_no,location,first_name,last_name 
001,9848022337,Hyderabad,Rajiv,Reddy  
002,9848022338,Kolkata,Siddarth,Battacharya 
003,9848022339,Delhi,Rajesh,Khanna



프로젝트에 Java solrj를 import했다고 가정한다.

import java.io.IOException;  

import org.apache.Solr.client.Solrj.SolrClient; 
import org.apache.Solr.client.Solrj.SolrQuery; 
import org.apache.Solr.client.Solrj.SolrServerException; 
import org.apache.Solr.client.Solrj.impl.HttpSolrClient; 
import org.apache.Solr.client.Solrj.response.QueryResponse; 
import org.apache.Solr.common.SolrDocumentList;  

public class RetrievingData { 
    public static void main(String args[]) throws SolrServerException, IOException  { 
        //솔라 클라이언트 생성(url은 아래와 같이 색인된 코어로 지정) 
        String urlString = "http://localhost:8983/Solr/my_core"; 
        SolrClient solrClient = new HttpSolrClient.Builder(urlString).build();  

        //solr에 날릴 쿼리(요청)객체 생성
        SolrQuery query = new SolrQuery();

        //first_name 필드의 값이 "Rajiv"인 문서 요청
        query.setQuery("first_name:Rajiv");

        //문서에 id, first_name, last_name 필드값만 반환
        query.addField(first_name);
        query.addField(last_name);
        query.addField("id");

        //파라미터 설정(해도되고 안해도 된다. 어차피 응답의 default는 json 형식이다.)
        query.set("rawQuery", true);
        query.set("wt", "json");

        //solrClient 객체의 query() 메소드로 생성한 쿼리 날리기
        QueryResponse queryResponse = solrClient.query(query);  

        //응답으로 온 객체의 모든 문서 출력
        SolrDocumentList docs = queryResponse.getResults();    
        for(SolrDocument doc : docs) {
            System.out.println(doc);
        }        
    } 
}



출력 결과는 아래와 같다.

{numFound = 1
 docs = [
    SolrDocument{id=001,
    first_name = [Rajiv],
    last_name = [Reddy]}
 ]
}

1개의 문서가 결과로 출력된다.



## 1. 검색 옵션 ##

Parameter Description
q 가장 중요한 파라미터로 찾고자하는 필드와 값을 설정한다.
fq 검색 결과를 필터링하는 파라미터이다. 검색결과들 중 이 파라미터값에 매칭되는 것들만 리턴한다.
sort 검색 결과를 정렬할 때 사용한다. 숫자나 알파벳의 오름차순, 내림차순으로 정렬할 수 있다.
rows 한 번의 검색에서 반환받을 문서의 최대값을 설정한다. 기본값은 10이다.
fl 반환되는 문서에 포함시킬 필드를 정의할 수 있다. 설정하지 않으면 모든 필드가 보여진다.
wt Solr가 사용할 ResponseWriter 객체를 설정한다. 이 객체에 따라 결과가 보여지는 형식이 달라진다. 기본값은 json이다.



예를들어 필드가 이름(name), 나이(age), 사는곳(location), 성별(sex), 직업(job)인 문서들을 인덱싱 하였을 때 아래와 같은 url로 검색(http 호출)을 하여 결과를 받을 수 있다.

#이름 john
#나이 10~20 사이
#이름 오름차순, 나이 내림차순으로 정렬
#최대 20개까지 출력
#문서에는 이름,나이,성별만 포함
#결과는 json 형식으로 돌려받음

http://localhost:8983/Solr/my_core/select?q=name:john&fq=age:[10 TO 20]&sort=name asc,age desc&rows=20&fl=name,age,sex&wt=json;



java Solrj를 통해 요청할 수도 있다.

public class RetrievingData { 
    public static void main(String args[]) throws SolrServerException, IOException  { 
        //솔라 클라이언트 생성(url은 아래와 같이 색인된 코어로 지정) 
        String urlString = "http://localhost:8983/Solr/my_core"; 
        SolrClient solrClient = new HttpSolrClient.Builder(urlString).build();  

        //solr에 날릴 쿼리(요청)객체 생성
        SolrQuery query = new SolrQuery();

        query.set("q", "name:john");
        //query.setQuery("name:john");

        query.set("fq", "age:[10 TO 20]");
        //query.setFilterQuery("age:[10 TO 20]");

        query.set("sort", "name asc,age desc");
        //query.setSort("name", ORDER.asc); query.setSort("age", ORDER.desc);

        query.set("rows", 20);
        //query.setRows(20);

        query.set("fl", "name,age,sex"); 
        //query.setFields("name","age","sex");
        //query.addField("name"); query.addField("age"); query.addField("sex");

        query.set("wt", "json");

        //응답으로 온 객체의 모든 문서 출력
        SolrDocumentList docs = queryResponse.getResults();    
        for(SolrDocument doc : docs) {
            System.out.println(doc);
        }        
    } 
}

아래에 주석처리 해놓은 코드로 대체할 수도 있다.

+ Recent posts