## 목차 ##
## 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);
}
}
}
아래에 주석처리 해놓은 코드로 대체할 수도 있다.
'프레임워크 > 솔라(Solr)' 카테고리의 다른 글
(솔라) 6 - 데이터 색인(Indexing) (0) | 2020.05.16 |
---|---|
(솔라) 5 - 코어(core) (0) | 2020.05.16 |
(솔라) 4 - 솔라 아키텍처 및 용어정리(Architecture) (0) | 2020.05.16 |
(솔라) 3 - 검색엔진(Search Engine) 개요 (0) | 2020.05.16 |
(솔라) 2 - 솔라 설치 및 실행 (0) | 2020.05.16 |