http://www.elasticsearch.org/blog/you-complete-me
1. 기본 데이터 입력
PUT /products/
{
"mappings" : {
"product" :{
"properties" : {
"name" : {"type":"string"},
"name_suggest" : {
"type" : "completion",
"payloads" : false
}
}
}
}
}
PUT /products/product/1
{
"name" : "Apple iPhone5",
"name_suggest" : "Apple iPhone 5"
}
PUT /products/product/2
{
"name" : "iPhone 4 16GB",
"name_suggest" : "iPhone 4 16GB"
}
PUT /products/product/3
{
"name" : "iPhone 3 GS 16GB black",
"name_suggest" : "iPhone 3 GS 16GB black"
}
PUT /products/product/4
{
"name" : "iPhone 3 GS 16GB white",
"name_suggest" : "iPhone 3 GS 16GB white"
}
PUT /products/product/5
{
"name" : "Apple iPhone case",
"name_suggest" : "Apple iPhone case"
}
2. 추천어 받기
POST /products/_suggest
{
"suggestions" : {
"text" : "i",
"completion" : {
"field" : "name_suggest"
}
}
}
3. 입력데이터 타입이 배열 등일때
PUT /products/product/1
{
"name" : "Apple iPhone5",
"name_suggest" : [
"Apple iPhone5",
"iPhone5",
"iPhone"
]
}
--> iPhone, iPhone5 가 같이 보인다. 같은 product 출신인데도...
4. 그래서, input, output의 분리
input은 여러개, output은 한개
PUT /products/product/1
{
"name" : "Apple iPhone5",
"name_suggest" : {
"input" : [
"Apple iPhone5",
"iPhone5",
"iPhone"
],
"output" : "Apple iPhone5"
}
}
PUT /products/product/2
{
"name" : "iPhone 4 16GB",
"name_suggest" : {
"input" : ["Apple iPhone4", "iPhone4"],
"output" : "iPhone 4 16GB"
}
}
PUT /products/product/3
{
"name" : "iPhone 3 GS 16GB black",
"name_suggest" : {
"input" : ["Apple iPhone 3", "iPhone 3"],
"output" : "iPhone 3 GS 16GB black"
}
}
PUT /products/product/4
{
"name" : "iPhone 4 S 16GB white",
"name_suggest" : {
"input" : ["Apple iPhone 4", "iPhone 4"],
"output" : "iPhone 4 S 16GB white"
}
}
PUT /products/product/5
{
"name" : "Apple iPhone case",
"name_suggest" : {
"input" : ["Apple iPhone case", "iPhone case"],
"output" : "Apple iPhone case"
}
}
5. 가중치를 줘서 정렬을 해보자.
PUT /products/product/1
{
"name" : "Apple iPhone5",
"name_suggest" : {
"input" : [
"Apple iPhone5",
"iPhone5",
"iPhone"
],
"output" : "Apple iPhone5",
"weight" : 100
}
}
PUT /products/product/2
{
"name" : "iPhone 4 16GB",
"name_suggest" : {
"input" : ["Apple iPhone4", "iPhone4"],
"output" : "iPhone 4 16GB",
"weight" : 70
}
}
PUT /products/product/3
{
"name" : "iPhone 3 GS 16GB black",
"name_suggest" : {
"input" : ["Apple iPhone 3", "iPhone 3"],
"output" : "iPhone 3 GS 16GB black",
"weight" : 30
}
}
PUT /products/product/4
{
"name" : "iPhone 4 S 16GB white",
"name_suggest" : {
"input" : ["Apple iPhone 4", "iPhone 4"],
"output" : "iPhone 4 S 16GB white",
"weight" : 75
}
}
PUT /products/product/5
{
"name" : "Apple iPhone case",
"name_suggest" : {
"input" : ["Apple iPhone case", "iPhone case"],
"output" : "Apple iPhone case",
"weight" : 40
}
}
6. 결과값에서 해당값으로 가는 링크를 위해 값(payload)을 실어본다.
- 인덱스 지우고 다시 매핑
DELETE products
PUT /products/
{
"mappings" : {
"product" :{
"properties" : {
"name" : {"type":"string"},
"name_suggest" : {
"type" : "completion",
"payloads" : true
}
}
}
}
}
- payload 넣어서 입력
PUT /products/product/1
{
"name" : "Apple iPhone5",
"name_suggest" : {
"input" : [
"Apple iPhone5",
"iPhone5",
"iPhone"
],
"output" : "Apple iPhone5",
"weight" : 100,
"payload" : {"id" : "1"}
}
}
PUT /products/product/2
{
"name" : "iPhone 4 16GB",
"name_suggest" : {
"input" : ["Apple iPhone4", "iPhone4"],
"output" : "iPhone 4 16GB",
"weight" : 70,
"payload" : {"id" : "2"}
}
}
PUT /products/product/3
{
"name" : "iPhone 3 GS 16GB black",
"name_suggest" : {
"input" : ["Apple iPhone 3", "iPhone 3"],
"output" : "iPhone 3 GS 16GB black",
"weight" : 30,
"payload" : {"id" : "3"}
}
}
PUT /products/product/4
{
"name" : "iPhone 4 S 16GB white",
"name_suggest" : {
"input" : ["Apple iPhone 4", "iPhone 4"],
"output" : "iPhone 4 S 16GB white",
"weight" : 75,
"payload" : {"id" : "4"}
}
}
PUT /products/product/5
{
"name" : "Apple iPhone case",
"name_suggest" : {
"input" : ["Apple iPhone case", "iPhone case"],
"output" : "Apple iPhone case",
"weight" : 40,
"payload" : {"id" : "5"}
}
}
7. 검색할때 fuzzy 옵션
POST /products/_suggest
{
"suggestions" : {
"text" : "ipohn",
"completion" : {
"field" : "name_suggest",
"fuzzy" : {"edit_distance" : 1}
}
}
}
'elastic search' 카테고리의 다른 글
실무예제로 배우는 elastic search (0) | 2014.04.10 |
---|---|
mysql데이터 출력하기 - JDBC river (0) | 2014.04.08 |
elastic search 정리 (0) | 2014.02.10 |