'2016/11'에 해당되는 글 17건

  1. 2016.11.25 [Elasticsearch] elasticsearch-analysis-arirang 5.0.1 플러그인 개발기
  2. 2016.11.24 [Elasticsearch] Lucene Arirang Analyzer Plugin for Elasticsearch 5.0.1
  3. 2016.11.23 [Nginx] osx 에 nginx 설치 하기 - brew install
  4. 2016.11.21 [미미박스 검색이야기] 배송비 절약상품 검색.
  5. 2016.11.21 [Kibana] Date Histogram Advanced DSL
  6. 2016.11.18 [미미박스 검색이야기] 검색 하고 바로 구매하세요.
  7. 2016.11.16 [미미박스 검색이야기] 카테고리/브랜드 인기 연관검색어란?
  8. 2016.11.15 [미미박스 검색이야기] 연관검색어란?
  9. 2016.11.09 [Java] String[] to List, List dedup. List to String comma
  10. 2016.11.09 [미미박스 검색이야기] 원하는 상품 찾기

[Elasticsearch] elasticsearch-analysis-arirang 5.0.1 플러그인 개발기

Elastic/Elasticsearch 2016. 11. 25. 12:31

Elasticsearch cluster 업그레이드를 위해 먼저 한글형태소 분석기 업그레이드가 필요합니다.

기본적으로 한글형태소 분석기 플러그인을 만들기 위해서는 아래의 내용을 어느 정도는 잘 알고 다룰수 있어야 합니다.


- Elasticsearch

- Lucene

- Arirang


Arirang 은 아래 링크를 통해서 소스와 jar 파일을 구하실 수 있습니다.


최근에 수명님 이외 mgkaki 님이 컨트리뷰션을 해주시고 계신듯 합니다. :)


Lucene & Arirang 변경 사항)

- lucene 6.1 과 6.2 의 패키지 구조가 변경이 되고 클래스도 바뀌었습니다.

- arirang 에서 제공하던 pairmap 관련 버그가 수정되었습니다. (그전에 수정이 되었을수도 있습니다. ^^;)

- lucene 에서 제공 되던 CharacterUtils 가 refactoring 되었습니다.

- arirang 에서 KoreanTokenizer 에 선언된 CharacterUtils 를 변경된 내용에 맞게 고쳐주어야 합니다.


Remove CharacterUtils.getInstance()

CharacterUtils.codePointAt(...) to Character.codePointAt(...)


- arirang 6.2 source를 내려 받으시면 위 변경 내용이 반영 되어 있습니다.

- arirang.morph 1.1.0 을 내려 받으셔야 합니다.


Elasticsearch Plugin 변경 사항)

플러그인 개발 변경 사항은 기본 구조 변경이 많이 되었기 때문에 수정 사항이 많습니다.

보기에 따라서 적을 수도 있지만 판단은 각자의 몫으로 ^^


- arirang.lucene-analyzer 와 arirang-morph 업데이트가 되어야 합니다.

- 기존에 binding 하던 AnalysisBinderProcessor를 사용하지 않습니다.

- 이제는 Plugin, AnalysisPlugin 에서 등록을 진행 합니다.


public class AnalysisArirangPlugin extends Plugin implements AnalysisPlugin {

  @Override

  public Map<String, AnalysisProvider<TokenFilterFactory>> getTokenFilters() {

    return singletonMap("arirang_filter", ArirangTokenFilterFactory::new);

  }


  @Override

  public Map<String, AnalysisProvider<TokenizerFactory>> getTokenizers() {

    Map<String, AnalysisProvider<TokenizerFactory>> extra = new HashMap<>();

    extra.put("arirang_tokenizer", ArirangTokenizerFactory::new);


    return extra;

  }


  @Override

  public Map<String, AnalysisProvider<AnalyzerProvider<? extends Analyzer>>> getAnalyzers() {

    return singletonMap("arirang_analyzer", ArirangAnalyzerProvider::new);

  }

}


- AnalyzerProvider, TokenFilterFactory, TokenizerFactory 내 생성자 argument 가 바뀌었습니다.

IndexSettings indexSettings, Environment env, String name, Settings settings


- assemble 하기 위한 plugin.xml 내 outputDirectory 가 elasticsearch 로 변경이 되었습니다. 

- outputDirectory 가 elasticsearch 로 작성되어 있지 않을 경우 에러가 발생 합니다.


이 정도 변경 하고 나면 이제 빌드 및 설치를 하셔도 됩니다.

이전 글 참고) [Elasticsearch] Lucene Arirang Analyzer Plugin for Elasticsearch 5.0.1


※ 플러그인을 만들면서 우선 lucene 6.1 과 6.2 가 바뀌어서 살짝 당황 했었습니다.

당연히 6.x 간에는 패키지 구조에 대한 변경은 없을거라는 기대를 했었는데 이게 잘못이였던 것 같습니다.

역시 lucene 5.x 에서 6.x 로 넘어 가기 때문에 elasticsearch 5.x 는 많이 바뀌었을 거라는 생각은 했었구요.

그래도 생각했던 것 보다 오래 걸리지는 않았지만 역시 참고할 만한 문서나 자료는 어디에도 없더라구요.

소스 보는게 진리라는건 변하지 않는 듯 싶내요. 작성하고 보니 이게 개발기인지 애매하내요. ^^;


소스코드)

https://github.com/HowookJeong/elasticsearch-analysis-arirang

:

[Elasticsearch] Lucene Arirang Analyzer Plugin for Elasticsearch 5.0.1

Elastic/Elasticsearch 2016. 11. 24. 19:02

우선 빌드한 플러그인 zip 파일 먼저 공유 합니다.

나중에 작업한 내용에 대해서는 github 에 올리도록 하겠습니다.

요즘 프로젝트며 운영 업무가 너무 많아서 이것도 겨우 겨우 시간 내서 작업 했내요.


elasticsearch-analysis-arirang-5.0.1.zip


설치 방법)

$ bin/elasticsearch-plugin install --verbose file:///elasticsearch-analysis-arirang/target/elasticsearch-analysis-arirang-5.0.1.zip


설치 로그)

-> Downloading file:///elasticsearch-analysis-arirang-5.0.1.zip

Retrieving zip from file:///elasticsearch-analysis-arirang-5.0.1.zip

[=================================================] 100%

- Plugin information:

Name: analysis-arirang

Description: Arirang plugin

Version: 5.0.1

 * Classname: org.elasticsearch.plugin.analysis.arirang.AnalysisArirangPlugin

-> Installed analysis-arirang


Elasticsearch 실행 로그)

$ bin/elasticsearch

[2016-11-24T18:49:09,922][INFO ][o.e.n.Node               ] [] initializing ...

[2016-11-24T18:49:10,083][INFO ][o.e.e.NodeEnvironment    ] [aDGu2B9] using [1] data paths, mounts [[/ (/dev/disk1)]], net usable_space [733.1gb], net total_space [930.3gb], spins? [unknown], types [hfs]

[2016-11-24T18:49:10,084][INFO ][o.e.e.NodeEnvironment    ] [aDGu2B9] heap size [1.9gb], compressed ordinary object pointers [true]

[2016-11-24T18:49:10,085][INFO ][o.e.n.Node               ] [aDGu2B9] node name [aDGu2B9] derived from node ID; set [node.name] to override

[2016-11-24T18:49:10,087][INFO ][o.e.n.Node               ] [aDGu2B9] version[5.0.1], pid[56878], build[080bb47/2016-11-11T22:08:49.812Z], OS[Mac OS X/10.12.1/x86_64], JVM[Oracle Corporation/Java HotSpot(TM) 64-Bit Server VM/1.8.0_72/25.72-b15]

[2016-11-24T18:49:11,335][INFO ][o.e.p.PluginsService     ] [aDGu2B9] loaded module [aggs-matrix-stats]

[2016-11-24T18:49:11,335][INFO ][o.e.p.PluginsService     ] [aDGu2B9] loaded module [ingest-common]

[2016-11-24T18:49:11,335][INFO ][o.e.p.PluginsService     ] [aDGu2B9] loaded module [lang-expression]

[2016-11-24T18:49:11,335][INFO ][o.e.p.PluginsService     ] [aDGu2B9] loaded module [lang-groovy]

[2016-11-24T18:49:11,335][INFO ][o.e.p.PluginsService     ] [aDGu2B9] loaded module [lang-mustache]

[2016-11-24T18:49:11,336][INFO ][o.e.p.PluginsService     ] [aDGu2B9] loaded module [lang-painless]

[2016-11-24T18:49:11,336][INFO ][o.e.p.PluginsService     ] [aDGu2B9] loaded module [percolator]

[2016-11-24T18:49:11,336][INFO ][o.e.p.PluginsService     ] [aDGu2B9] loaded module [reindex]

[2016-11-24T18:49:11,336][INFO ][o.e.p.PluginsService     ] [aDGu2B9] loaded module [transport-netty3]

[2016-11-24T18:49:11,336][INFO ][o.e.p.PluginsService     ] [aDGu2B9] loaded module [transport-netty4]

[2016-11-24T18:49:11,336][INFO ][o.e.p.PluginsService     ] [aDGu2B9] loaded plugin [analysis-arirang]

[2016-11-24T18:49:14,151][INFO ][o.e.n.Node               ] [aDGu2B9] initialized

[2016-11-24T18:49:14,151][INFO ][o.e.n.Node               ] [aDGu2B9] starting ...

[2016-11-24T18:49:14,377][INFO ][o.e.t.TransportService   ] [aDGu2B9] publish_address {127.0.0.1:9300}, bound_addresses {[fe80::1]:9300}, {[::1]:9300}, {127.0.0.1:9300}

[2016-11-24T18:49:17,511][INFO ][o.e.c.s.ClusterService   ] [aDGu2B9] new_master {aDGu2B9}{aDGu2B9mQ8KkWCe3fnqeMw}{_y9RzyKGSvqYAFcv99HBXg}{127.0.0.1}{127.0.0.1:9300}, reason: zen-disco-elected-as-master ([0] nodes joined)

[2016-11-24T18:49:17,584][INFO ][o.e.g.GatewayService     ] [aDGu2B9] recovered [0] indices into cluster_state

[2016-11-24T18:49:17,588][INFO ][o.e.h.HttpServer         ] [aDGu2B9] publish_address {127.0.0.1:9200}, bound_addresses {[fe80::1]:9200}, {[::1]:9200}, {127.0.0.1:9200}

[2016-11-24T18:49:17,588][INFO ][o.e.n.Node               ] [aDGu2B9] started


한글형태소분석 실행)

$ curl -X POST -H "Cache-Control: no-cache" -H "Postman-Token: 6d392d83-5816-71ad-556b-5cd6f92af634" -d '{

  "analyzer" : "arirang_analyzer",

  "text" : "[한국] 엘라스틱서치 사용자 그룹의 HENRY 입니다."

}' "http://localhost:9200/_analyze"


형태소분석 결과)

{

  "tokens": [

    {

      "token": "[",

      "start_offset": 0,

      "end_offset": 1,

      "type": "symbol",

      "position": 0

    },

    {

      "token": "한국",

      "start_offset": 1,

      "end_offset": 3,

      "type": "korean",

      "position": 1

    },

    {

      "token": "]",

      "start_offset": 3,

      "end_offset": 4,

      "type": "symbol",

      "position": 2

    },

    {

      "token": "엘라스틱서치",

      "start_offset": 5,

      "end_offset": 11,

      "type": "korean",

      "position": 3

    },

    {

      "token": "엘라",

      "start_offset": 5,

      "end_offset": 7,

      "type": "korean",

      "position": 3

    },

    {

      "token": "스틱",

      "start_offset": 7,

      "end_offset": 9,

      "type": "korean",

      "position": 4

    },

    {

      "token": "서치",

      "start_offset": 9,

      "end_offset": 11,

      "type": "korean",

      "position": 5

    },

    {

      "token": "사용자",

      "start_offset": 12,

      "end_offset": 15,

      "type": "korean",

      "position": 6

    },

    {

      "token": "그룹",

      "start_offset": 16,

      "end_offset": 18,

      "type": "korean",

      "position": 7

    },

    {

      "token": "henry",

      "start_offset": 20,

      "end_offset": 25,

      "type": "word",

      "position": 8

    },

    {

      "token": "입니다",

      "start_offset": 26,

      "end_offset": 29,

      "type": "korean",

      "position": 9

    }

  ]

}


:

[Nginx] osx 에 nginx 설치 하기 - brew install

ITWeb/개발일반 2016. 11. 23. 10:02

mac osx 에 설치 할 일이 있어서 작성해 봅니다.


$ sudo chown -R '사용자계정' /usr/local/lib/pkgconfig

$ brew install pcre

$ brew link --overwrite pcre

$ brew update

$ sudo chown -R '사용자계정' /usr/local

$ brew install nginx

$ sudo chown root:wheel /usr/local


'사용자계정' 에는 user account 넣어 주시면 됩니다.

예를 들어 henry 라는 계정을 사용하시면)

$ sudo chown -R henry /usr/local/lib/pkgconfig


저는 설치 하다 몇 가지 에러가 발생을 해서 위 순서대로 구성을 하였습니다.

아래는 발생한 에러 입니다.


Error case 1)

Error: The `brew link` step did not complete successfully

The formula built, but is not symlinked into /usr/local

Could not symlink lib/pkgconfig/libpcre.pc

/usr/local/lib/pkgconfig is not writable.


Error case 2)

mkdir: /usr/local/var/run: Permission denied

make[1]: *** [install] Error 1

make: *** [install] Error 2


READ THIS: https://git.io/brew-troubleshooting


/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/open-uri.rb:353:in `open_http': 422 Unprocessable Entity (GitHub::Error)

Validation Failed


Error case 3)

Error: The /usr/local directory is not writable.

Even if this directory was writable when you installed Homebrew, other

software may change permissions on this directory. For example, upgrading

to OS X El Capitan has been known to do this. Some versions of the

"InstantOn" component of Airfoil or running Cocktail cleanup/optimizations

are known to do this as well.


You should probably change the ownership and permissions of /usr/local

back to your user account.

  sudo chown -R $(whoami):admin /usr/local


:

[미미박스 검색이야기] 배송비 절약상품 검색.

ITWeb/미미박스검색이야기 2016. 11. 21. 16:40

오늘은 지난 주에 오픈한 배송비 절약상품 검색에 대해서 알려 드리려고 합니다.


서비스쪽 작업은 플랫폼 개발팀에서 진행을 했구요.

검색 개발팀에서는 실제 데이터 조건에 대한 검색과 기본 색인 데이터를 생성하기 위한 작업에 대해서 개발을 진행했습니다.


쉽게 정리 하면 Back-end 개발 작업을 진행했습니다.


미미박스에서는 다양한 배송조건의 상품들이 있습니다.

이 다양한 상품 조건에 대해서 DB 검색을 할 경우 서비스 성능과 구조 변경에 대한 이슈 발생으로 다른 대안을 찾고 있었습니다.

그래서 저희 팀에서 관련 기능 구현을 위한 지원을 하기로 했고 바로 지난 주에 오픈이 되었습니다.


Back-end 는 보여 드릴 수 없으니 서비스 화면을 캡쳐해서 보여 드리겠습니다.


Step 1)

미미박스 페이지에서 또는 검색 후 결과 페이지에서 상품을 장바구니에 담거나 즉시구매를 시도 합니다.


Step 2)

장바구니 또는 즉시구매 페이지에서 무료배송이 아닐 경우 아래와 같은 배송비 절약상품 버튼이 노출 됩니다.


Step 3)

배송비 절약상품 버튼 클릭 후 레이어 팝업에서 배송비를 절약할 수 있는 상품을 선택해서 담습니다.


보통 이 배송비 절약상품은 일반 쇼핑몰에서 업체별 배송상품과 같이 묶어서 배송비 절약하기 등으로 기능을 제공 하고 있습니다.

오픈 마켓같은 경우 해당 판매자의 상품을 추가로 더 구매 할 경우 무료배송비 조건 금액에 맞춰서 관련 기능을 제공 하고 있습니다.


※ 본 글은 회사의 입장과는 전혀 상관이 없으며 개인적인 의견으로 작성된 글 임을 알려 드립니다.


:

[Kibana] Date Histogram Advanced DSL

Elastic/Kibana 2016. 11. 21. 10:34

Kibana 를 사용하면서 많이 사용하는 것중 하나가 바로 Date Histogram Aggregation 입니다.

기본 결과에 대한 정렬은 count 에 대한 desc 으로 결과가 전달 되는데요.

날짜에 대한 desc 정렬을 하고 싶은 경우 아래와 같은 스크립트를 추가 하시면 됩니다.


제가 많이 사용하는 스크립트라 매번 타이핑 하기 귀찮아서 올려 봅니다.


{

"field":"time",

"interval":"1w",

  "order": {

    "_key": "desc"

  }

}


- field 값에 time 을 넣은 이유는 @timestamp 를 사용하기 않기 때문 입니다. :)

- order 에 사용 가능한 field 는 

Date Histogram 에서는 _key, _count

Terms 에서는 _term, _count

입니다.


:

[미미박스 검색이야기] 검색 하고 바로 구매하세요.

ITWeb/미미박스검색이야기 2016. 11. 18. 15:43

검색하고 상품을 바로 구매 하는 기능이 추가 되었습니다.

미미박스 상품(딜) 상세 페이지에 있던 간편옵션이라는 기능인데, 이 기능을 검색 결과 페이지에도 적용을 하였습니다.

이제 검색하고 바로 상품을 구매 하시거나 장바구니에 담아 보시기 바랍니다.


[상품옵션 바로선택]

- 상품 이미지로 마우스 오버 하시면 상품옵션 바로선택 버튼이 노출 됩니다.

- 상품옵션 바로선택 버튼을 클릭 하시면 아래로 간편옵션이 펼쳐지고 버튼 이외 이미지 영역을 클릭 하시면 기존과 같이 상세페이지로 전환 됩니다.



즐겁고 편한 쇼핑 되시기 바랍니다.


※ 본 글은 회사의 입장과는 전혀 상관이 없으며 개인적인 의견으로 작성된 글 임을 알려 드립니다.


:

[미미박스 검색이야기] 카테고리/브랜드 인기 연관검색어란?

ITWeb/미미박스검색이야기 2016. 11. 16. 14:24

검색로그 기반으로 검색어에 대한 추천 데이터를 다양하게 만들어 볼 수 있습니다.

오늘은 사용자들이 입력한 검색어를 기반으로 카테고리 별 인기 연관검색어 추천과 브랜드 별 인기 연관검색어 추천에 대해서 살펴 보겠습니다.


카테고리 별 연관검색어 추출 및 사용)

일반적으로 검색 후 원하는 상품을 클릭하게 됩니다.

이럴경우 클릭 로그가 전송되며, 로그 정보에는 검색어와 카테고리에 대한 정보가 포함이 되어 있게 됩니다.

여기서 user segment 정보를 이용해서 user별 카테고리에 대한 aggregation 작업을 수행하고 카테고리별 검색어 aggregation 작업도 함께 반영 하여 데이터 마트를 생성 합니다.


서비스에서는 카테고리 ID로 정보를 요청하도록 API를 구성해서 제공을 해줍니다.

스킨케어 카테고리 전시 페이지 : http://www.memebox.com/category/179



브랜드 별 연관검색어 추출 및 사용)

브랜드 역시 검색 후 원하는 상품을 클릭 시 카테고리와 동일하게 클릭 로그가 전달 되게 됩니다.

역시 이 클릭 로그를 기반으로  브랜드에 대한 aggregation 작업과 브랜드의 검색어 aggregation 작업 후 데이터 마트를 생성하게 됩니다.


서비스에서는 역시 브랜드 ID로 정보를 요청하도록 API를 구성해서 제공을 해줍니다.

누니 브랜드 전시 페이지 : http://www.memebox.com/brand/43728



위 인기 연관 검색어를 클릭 하게되면 선택된 검색어 + 카테고리 또는 브랜드 필터를 바탕으로 한 검색결과 페이지로 전환 되게 됩니다.


카테고리 + 인기 연관 검색어)

카테고리 : 스킨케어

검색어 : 미스트

SRP : http://search.memebox.com/memebox/search?q=%EB%AF%B8%EC%8A%A4%ED%8A%B8&at=1&door=pc_category&qt=recommend&cat1=191



브랜드 + 인기 연관 검색어)

브랜드 : 누니

검색어 : 리페어 테라피 크림

SRP : http://search.memebox.com/memebox/search?q=%EB%A6%AC%ED%8E%98%EC%96%B4%20%ED%85%8C%EB%9D%BC%ED%94%BC%20%ED%81%AC%EB%A6%BC&brd=43728&at=1&door=pc_brand&qt=recommend



- 본 기능은 검색 결과에 대한 필터링 기능을 포함하기 때문에 좀 더 타겟팅(narrow down) 검색을 하실 수 있습니다.


※ 본 글은 회사의 입장과는 전혀 상관이 없으며 개인적인 의견으로 작성된 글 임을 알려 드립니다.

:

[미미박스 검색이야기] 연관검색어란?

ITWeb/미미박스검색이야기 2016. 11. 15. 11:45

오늘은 연관검색어에 대해서 이야기를 해보려 합니다.


연관검색어에 대한 정의는 어떻게 될까요?

우선 정확하게 사전 같은 곳에 등록된 정의는 없는 것 같습니다. 아니면 제가 못찾았나 봅니다.

그래서 제가 생각한 연관검색어의 두 가지 정의에 대해 살펴 보도록 하겠습니다.


1. 입력한 단어와 유사한 검색어

즉, 입력한 검색어를 포함하고 있는 검색어를 추천해서 보여주는 방식이 될 것 같습니다.

이와 비슷한 방식으로 적용된 곳이 네이버 지식쇼핑이 되겠습니다.

http://shopping.naver.com/search/all.nhn?query=%EB%82%98%EC%9D%B4%ED%82%A4&cat_id=&frm=NVSHATC




2. 입력한 단어와 같은 검색어를 입력한 사람들이 입력한 검색어

이 정의는 기본 전제(가정)이 있어야 합니다.

즉, 

- "같은 세션동안 상품을 찾기 위해 입력한 검색어 들이 연관이 있을 것이다" 라는 것과 

- "같은 검색어를 입력한 사용자들은 유사한 관심 또는 상품을 찾고 있을 것이다" 라는

두 가지 전제(가정) 입니다.

이와 같은 방식으로 미미박스의 연관검색어는 기능 구현이 되어 있습니다.

http://search.memebox.com/memebox/search?q=%EB%A9%80%ED%8B%B0%EC%8A%A4%ED%8B%B1&at=1&door=pc_sub&qt=box




1번의 경우 가장 빠르게 구현을 할 수 있습니다.

기본적으로 자동완성 기능을 제공 하고 있다면 자동완성 키워드 목록에서 유사 검색어를 추출 할 수 있습니다.


2번의 경우 검색 로그에 대한 수집과 분석이 함께 이루어져야 합니다.

1번 보다는 시간이 더 많이 걸리며 품질을 높이기 위한 방법을 계속 연구해야 합니다.


※ 본 글은 회사의 입장과는 전혀 상관이 없으며 개인적인 의견으로 작성된 글 임을 알려 드립니다.

:

[Java] String[] to List, List dedup. List to String comma

ITWeb/개발일반 2016. 11. 9. 12:42

이젠 뭘 해도 기억력이 따라오질 못합니다. ㅠ.ㅠ

복습을 위해서.


Stirng[] to List)

String[] keywords = {"기어", "s3", "기어"};

List<String> lists = Arrays.asList(keywords);


List DeDup)

HashSet<String> set = new HashSet<>(lists);

List<String> result = new ArrayList<>(set);


List to String comma)

StringUtils.join(result, ',');


:

[미미박스 검색이야기] 원하는 상품 찾기

ITWeb/미미박스검색이야기 2016. 11. 9. 09:59

이전 글에서 그냥 정확도 우선이라고 했지 그래서 어떻게 검색을 해야 하는지에 대한 설명이 부족했던 것 같습니다. 그래서 검색창에서 검색 하는 방법에 대해서 이야기를 해보려고 합니다.


이전 글)
[미미박스 검색이야기] 미미박스는 정확도 우선 검색 기능을 제공 합니다.


미미박스에서는 검색 시 입력한 검색어에 대한 Term Query 를 사용합니다.
즉, 입력한 검색어와 정확히 일치하는 단어가 상품 제목이나 설명 등에 포함이 되어 있어야 검색 결과로 제공이 가능 하다는 의미가 됩니다.


대부분의 e-커머스에서는 일반적인 웹문서와 같은 전문(fulltext) 검색을 적용하지 않으며 상품에 대한 특성과 속성에 맞는 검색 기법을 제공해 주게 됩니다.

미미박스 역시 전문 검색을 제공하지 않고 사용자가 입력한 검색어를 하나의 토큰 또는 최소 검색 일치 단어로 활용해서 검색을 수행하고 있으며, 자연어 처리에 대한 또는 서술형 질의에 대한 최적화 작업은 아직 미진합니다.


그럼 몇 가지 예를 들어 검색 활용 방법을 소개해 드리도록 하겠습니다.


Case 1) 특정 브랜드의 어떤 제품을 찾고 싶을 때

본비반트마스크팩을 찾을 경우


브랜드 명 : 본비반트

어떤 제품 : 마스크팩


검색 질의어 및 결과 화면)




Case 2) 어떤 제품을 사용하는데 필요한 도구를 찾고 싶을 때

섀도우브러쉬를  찾을 경우


어떤 제품 : 섀도우

도구 : 브러쉬


검색 질의어 및 결과 화면)



Case 3) 어떤 기능성을 가진 어떤 제품을 찾고 싶을 때

보습 기능을 가진 오일 제품을 찾을 경우


어떤 기능성 : 보습

어떤 제품 : 오일


검색 질의어 및 결과 화면)



이와 같이 3가지 예를 들어 설명을 드렸습니다.

원하시는 상품을 찾는데 도움이 되셨으면 좋겠습니다.


※ 본 글은 회사의 입장과는 전혀 상관이 없으며 개인적인 의견으로 작성된 글 임을 알려 드립니다.


: