이 페이지에서는 Fess API를 빠르게 사용하기 위한 실용 가이드를 제공합니다.
5분 만에 시작하기
사전 준비
Fess 가 실행 중 (http://localhost:8080/ 에 접속 가능)
관리 화면 > 시스템 > 일반에서 JSON 응답이 활성화되어 있어야 합니다
검색 API 사용해 보기
curl 명령 예시:
# 기본 검색
curl "http://localhost:8080/api/v1/documents?q=fess"
# 20건의 검색 결과 가져오기
curl "http://localhost:8080/api/v1/documents?q=fess&num=20"
# 2페이지 가져오기 (21번째 결과부터)
curl "http://localhost:8080/api/v1/documents?q=fess&start=20"
# 라벨 필터를 사용한 검색
curl "http://localhost:8080/api/v1/documents?q=fess&fields.label=docs"
# 패싯(집계)을 사용한 검색
curl "http://localhost:8080/api/v1/documents?q=fess&facet.field=label"
# 특수 문자가 포함된 검색 (URL 인코딩)
curl "http://localhost:8080/api/v1/documents?q=search%20engine"
응답 예시 (정형화):
{
"q": "fess",
"exec_time": 0.15,
"record_count": 125,
"page_size": 20,
"page_number": 1,
"data": [
{
"title": "Fess - Open Source Enterprise Search Server",
"url": "https://fess.codelibs.org/",
"content_description": "<strong>Fess</strong> is an easy to deploy...",
"host": "fess.codelibs.org",
"mimetype": "text/html"
}
]
}
제안 API 사용해 보기
# 제안 가져오기
curl "http://localhost:8080/api/v1/suggest?q=fes"
# 응답 예시
# {"q":"fes","result":[{"text":"fess","kind":"document"}]}
라벨 API 사용해 보기
# 사용 가능한 라벨 가져오기
curl "http://localhost:8080/api/v1/labels"
헬스 체크 API 사용해 보기
# 서버 상태 확인
curl "http://localhost:8080/api/v1/health"
# 응답 예시
# {"data":{"status":"green","cluster_name":"fess"}}
Postman 사용하기
Fess API는 Postman으로 간편하게 사용할 수 있습니다.
컬렉션 설정
Postman을 열고 새 컬렉션을 작성합니다
다음 요청을 추가합니다:
검색 API:
Method:
GETURL:
http://localhost:8080/api/v1/documentsQuery Parameters: -
q: 검색 키워드 -num: 결과 수 (옵션) -start: 시작 위치 (옵션)
제안 API:
Method:
GETURL:
http://localhost:8080/api/v1/suggestQuery Parameters: -
q: 입력 문자열
라벨 API:
Method:
GETURL:
http://localhost:8080/api/v1/labels
환경 변수
서버 URL을 관리하기 위해 Postman 환경 변수를 사용하는 것을 권장합니다.
“Environments”에서 새 환경을 작성합니다
변수 추가:
fess_url=http://localhost:8080요청 URL을
{{fess_url}}/api/v1/documents로 변경합니다
프로그래밍 언어별 코드 샘플
Python
import requests
import urllib.parse
# Fess 서버 URL
FESS_URL = "http://localhost:8080"
def search(query, num=20, start=0):
"""Fess 검색 API 호출"""
params = {
"q": query,
"num": num,
"start": start
}
response = requests.get(f"{FESS_URL}/api/v1/documents", params=params)
return response.json()
# 사용 예시
results = search("enterprise search")
print(f"총 건수: {results['record_count']}")
for doc in results['data']:
print(f"- {doc['title']}")
print(f" URL: {doc['url']}")
JavaScript (Node.js)
const fetch = require('node-fetch');
const FESS_URL = 'http://localhost:8080';
async function search(query, num = 20, start = 0) {
const params = new URLSearchParams({ q: query, num, start });
const response = await fetch(`${FESS_URL}/api/v1/documents?${params}`);
return response.json();
}
// 사용 예시
search('enterprise search').then(results => {
console.log(`총 건수: ${results.record_count}`);
results.data.forEach(doc => {
console.log(`- ${doc.title}`);
console.log(` URL: ${doc.url}`);
});
});
JavaScript (브라우저)
// JSONP 사용
function search(query, callback) {
const script = document.createElement('script');
const url = `http://localhost:8080/api/v1/documents?q=${encodeURIComponent(query)}&callback=${callback}`;
script.src = url;
document.body.appendChild(script);
}
// 콜백 함수
function handleResults(results) {
console.log(`총 건수: ${results.record_count}`);
}
// 사용 예시
search('Fess', 'handleResults');
Java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
public class FessApiClient {
private static final String FESS_URL = "http://localhost:8080";
private final HttpClient client = HttpClient.newHttpClient();
public String search(String query) throws Exception {
String encodedQuery = URLEncoder.encode(query, StandardCharsets.UTF_8);
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(FESS_URL + "/api/v1/documents?q=" + encodedQuery))
.GET()
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
return response.body();
}
public static void main(String[] args) throws Exception {
FessApiClient client = new FessApiClient();
String result = client.search("enterprise search");
System.out.println(result);
}
}
API 버전 호환성
| Fess 버전 | API 버전 | 비고 |
|---|---|---|
| 15.x | v1 | 최신 버전. 전 기능 지원 |
| 14.x | v1 | 유사한 API. 일부 파라미터 차이가 있을 수 있음 |
| 13.x | v1 | 기본 API 지원 |
참고
API 호환성은 유지되지만 새로운 기능은 최신 버전에서만 사용 가능합니다. 버전 간 차이에 대한 자세한 내용은 릴리스 노트 를 참조하세요.
트러블슈팅
API가 작동하지 않는 경우
JSON 응답이 활성화되어 있는지 확인
관리 화면 > 시스템 > 일반에서 “JSON 응답”이 활성화되어 있는지 확인합니다.
브라우저에서 CORS 에러
브라우저에서 접근 시 CORS 에러가 발생하면 JSONP를 사용하거나 서버에서 CORS 설정을 구성합니다.
JSONP 예시:
curl "http://localhost:8080/api/v1/documents?q=fess&callback=myCallback"인증이 필요한 경우
액세스 토큰이 설정된 경우 요청 헤더에 포함합니다:
curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ "http://localhost:8080/api/v1/documents?q=fess"
다음 단계
검색 API - 검색 API 상세
자동완성 API - 제안 API 상세
Admin API 레퍼런스 - 관리 API 사용법