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
Posted by altvirus
,