'검색'에 해당되는 글 30건

  1. 2017.07.31 [Lucene] SynonymFilter -> SynonymGraphFilter + FlattenGraphFilter
  2. 2017.07.31 [미미박스 검색이야기] 뷰티풀 솔루션 (Beautyfull Solution)
  3. 2017.07.28 [미미박스 검색이야기] Quick Search - 퀵서치
  4. 2017.06.09 [Arirang Analyzer - lucene 6.5.0] Term startOffset 정렬 오류
  5. 2017.05.31 [검색] SEO 태그 가이드
  6. 2017.05.19 [미미박스 검색이야기] 상세검색 필터 개선
  7. 2017.05.19 [미미박스 검색이야기] 자동완성 추천필터와 검색 결과 내 배너
  8. 2017.04.27 [Elasticsearch] 5.x 용 Arirang 형태소 분석기 사용 시 주의 사항.
  9. 2017.03.31 [미미박스 검색이야기] 검색 홈 개인화 추천 서비스 오픈!!
  10. 2017.03.16 [미미박스 검색이야기] PC웹 검색 결과 내 검색어 추천 상품 제공

[Lucene] SynonymFilter -> SynonymGraphFilter + FlattenGraphFilter

ITWeb/검색일반 2017.07.31 18:37

오늘 뭐 좀 보다가 그냥 공유해 봅니다.
https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-synonym-tokenfilter.html


lucene 6.6 에서는 SynonymFilter@Deprecated 되어 있습니다.

대체 filter 는 글에도 나와 있지만 SynonymGraphFilter 인데요.

재밌는건 이넘은 search time 에서 동작 하는 거라 index time 에는 여전히 SynonymFilter 또는 FlattenGraphFilter 를 사용해야 한다는 점입니다.

아직 깊게 분석해보지 않아서 ^^; 


간만에 lucene 코드 까서 이것 저것 테스트 해보니 재밌내요.

그냥 참고 하시라고 올려봤습니다.


저작자 표시 비영리 변경 금지
신고
Trackback 0 : Comment 0

[미미박스 검색이야기] 뷰티풀 솔루션 (Beautyfull Solution)

ITWeb/미미박스검색이야기 2017.07.31 16:03

2017년 7월 31일.

고객의 고민 해결을 위한 서비스를 이커머스 회사에서 이렇게 해냅니다. ^^


물건을 팔기 위함이 목적이 아닌 고객의 고민을 해결해 드리기 위해 기획하고 만든 서비스 입니다.

아직 부족한 점이 많지만 고객님들의 고민이 해결 되는 그날까지 최선을 다 해보겠습니다.


경험해 보기)

https://m.search.memebox.com/memebox/solution/home


검색어 입력 방법)

일반적인 얼굴 부위에 대한 메이크업 고민, 피부 트러블에 대한 고민, 스킨케어에 대한 고민을 입력해 주시면 됩니다.


예)

"얼굴이 너무 커요"

"유분이 많아서 화장이 무너져요"



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


저작자 표시 비영리 변경 금지
신고
Trackback 0 : Comment 0

[미미박스 검색이야기] Quick Search - 퀵서치

ITWeb/미미박스검색이야기 2017.07.28 16:35


기능 적용한지 좀 되었는데 이제야 홍보 합니다. ^^;


퀵서치라는 기능은 기본적으로 모바일 환경에서 검색어를 입력하지 않고 검색 필터 기능을 활용해서 쉽게 원하는 조건의 상품을 검색해서 볼 수 있도록 제공하기 위해 만들어 졌습니다.


더불어 해당 영역은 검색 이외 "바로가기" 기능이나 특정 페이지로 랜딩 시키기 위한 용도로도 활용이 가능 합니다.


구경하기)

http://m.search.memebox.com/





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


저작자 표시 비영리 변경 금지
신고
Trackback 0 : Comment 0

[Arirang Analyzer - lucene 6.5.0] Term startOffset 정렬 오류

ITWeb/검색일반 2017.06.09 10:23

[arirang-analyzer-6.5.0]

  term analyzed 시 startOffset 정보에 대한 정렬이 역전 되는 오류

  개별 term 에서의 startOffset 이 역전 되기 때문에 아래 class 의 method 에서 정렬을 다시 맞춰줍니다.

  (정상적인 방법 이라기 보다는 일단 문제를 회피하기 위한 방법 입니다.)


  Class : KoreanFilter

  Method 1 :

    private void analysisKorean(String input) throws MorphException {


  //  input = trimHangul(input);

      List<AnalysisOutput> outputs = morph.analyze(input);

      if (outputs.size() == 0) {

        return;

      }


      Map<String, KoreanToken> map = new LinkedHashMap<String, KoreanToken>();

      if (hasOrigin) {

        map.put("0:" + input, new KoreanToken(input, offsetAtt.startOffset()));

      }


      extractKeyword(outputs, offsetAtt.startOffset(), map, 0);


      Collection<KoreanToken> values = map.values();

      for (KoreanToken kt : values) {

        kt.setOutputs(outputs);

      }


      // 이 부분에서 map 에 등록된 정보를 정렬 합니다.


      morphQueue.addAll(map.values());

    }


  Method 2 :

    private void analysisKorean(String input) throws MorphException {


  //  input = trimHangul(input);

      List<AnalysisOutput> outputs = morph.analyze(input);

      if (outputs.size() == 0) {

        return;

      }


      Map<String, KoreanToken> map = new LinkedHashMap<String, KoreanToken>();

      if (hasOrigin) {

        map.put("0:" + input, new KoreanToken(input, offsetAtt.startOffset()));

      }


      extractKeyword(outputs, offsetAtt.startOffset(), map, 0);


      Collection<KoreanToken> values = map.values();

      for (KoreanToken kt : values) {

        kt.setOutputs(outputs);

      }


      morphQueue.addAll(map.values());

      // 이 부분에서 morphQueue 에 등록된 정보를 정렬 합니다.

      morphQueue.sort(Comparator.comparingInt(KoreanToken::getOffset));

    }


  Method 3 : 

    protected void extractKeyword(List<AnalysisOutput> outputs, int startoffset,

      final Map<String, KoreanToken> map, int position) {

      ... 원본 코드 생략


      // 이 부분에서 map 에 대한 등록된 정보를 정렬 합니다.

    }


  정렬 방법 :

    참고) https://stackoverflow.com/questions/109383/sort-a-mapkey-value-by-values-java


    final List<Map.Entry<String, KoreanToken>> offsetSorts = map.entrySet().stream()

        .sorted(Map.Entry.comparingByValue(Comparator.comparingInt(KoreanToken::getOffset)))

        .collect(Collectors.toList());


    map.clear();


    offsetSorts.stream().forEachOrdered(e -> map.put(e.getKey(), e.getValue()));


  Method 4 :

    KoreanFilter 를 상속받아 CustomKoreanFilter 를 만들어 사용 하면 됩니다.


저작자 표시 비영리 변경 금지
신고
Trackback 0 : Comment 0

[검색] SEO 태그 가이드

ITWeb/검색일반 2017.05.31 16:52

- 네이버 검색 관련 가이드 : http://webmastertool.naver.com/guide/basic_optimize.naver

- 구글 검색 관련 가이드 : https://developers.google.com/search/docs/guides/search-gallery 

- 페이스북 오픈 그래프 태그 가이드 : https://developers.facebook.com/docs/sharing/webmasters#markup

- 페이스북 앱 링크 태그 가이드 : https://developers.facebook.com/docs/applinks/metadata-reference


저작자 표시 비영리 변경 금지
신고
tags : search, SEO, tag, 검색
Trackback 0 : Comment 0

[미미박스 검색이야기] 상세검색 필터 개선

ITWeb/미미박스검색이야기 2017.05.19 10:49

늦었지만 그래도 열심히 작업한 내용이니 공유해 봅니다.

이 작업 내용은 좀 큰 작업이였습니다.

상세검색 기능이 있었지만 실제 사용양이 거의 없다고 할 정도로 충격적이였습니다.

우선 모바일 경험에서 보면 숨겨 놓은 것 자체가 많이 쓰지 말라는 것과 같은 것인데 시간이 없다는 이유로 .... ㅡ.ㅡ;

그래서 대표가 되는 검색 필터를 밖으로 끄집어 냈습니다.


결과는 기존 대비 5배에서 7배 정도의 사용성 개선 효과가 있었습니다.

각 플랫폼 별로 보면 android 는 5배 개선, ios 와 mobile web 은 7배 개선이 되었습니다.


앞으로도 더 좋은 모습으로 찾아 뵙겠습니다.


구경하기)

http://m.search.memebox.com/



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

저작자 표시 비영리 변경 금지
신고
Trackback 0 : Comment 0

[미미박스 검색이야기] 자동완성 추천필터와 검색 결과 내 배너

ITWeb/미미박스검색이야기 2017.05.19 10:41

4월에 오픈한 것도 있는데 미쳐 정신이 없어서 일단 5월 오픈 내용 부터 포스팅 하고 4월 변경 내용도 작성해 보도록 하겠습니다.


우리에게 있는 좋은 기획전과 이벤트/쿠폰등을 고객의 니즈에 맞춰 보여 주면 어떨까 싶어서 시작을 했습니다.

오픈한지 얼마 되지 않아 많이 사용이 되고 있지 못하지만 좋은 기획전과 이벤트로 고객에게 다가가는 서비스가 되도록 노력해 보고자 합니다.


더불어 자동완성 기능을 많이 사용하시는데 검색 결과에 대한 필터를 바로 제공 함으로써 더 빠르게 상품을 찾아 보실 수 있도록 편의성을 강화 하였습니다.

뭐 별거 아니라고 생각 하실 수도 있지만 작은 변화라도 알리고 공유를 해야 한다는 마음에 작성해 봤습니다. :)


구경하러가기)

모바일 : http://m.search.memebox.com/

PC : http://www.memebox.com/




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

저작자 표시 비영리 변경 금지
신고
Trackback 0 : Comment 0

[Elasticsearch] 5.x 용 Arirang 형태소 분석기 사용 시 주의 사항.

Elastic/Elasticsearch 2017.04.27 10:05

Elasticsearch에서 아리랑 형태소분석기 사용 시 주의사항)

사실 주의 사항 이라기 보다 1음절 처리에 대한 고민을 해보시면 좋을 것 같다는 의견 드립니다.


2.x 에서 사용하던 arirang 과 lucene 의 버전은 

- morph 1.0.x

- arirang & lucene 5.x

입니다.


5.x 에서 사용하던 arirang 과 lucene 의 버전은

- morph 1.1.0

- arirang & lucene 6.x

입니다.


여기서 arirang morph 쪽 코드가 많이 개선 또는 변경이 되었습니다.

그리고 몇 가지 default 설정 값들에 대한 변화도 있는데요.


제가 발견한 대표적인 문제는 아래와 같습니다.


'울퉁불퉁한' 이라는 source 에 대한 analysis 시 발생을 합니다.


5.x 에서 analyze 한 결과는 아래와 같습니다.

울퉁불퉁한(N)/90:2

울퉁불퉁/Z

한/N

울퉁불퉁(N),하(t),ㄴ(e)/70:2

울퉁/N

불퉁/N


2.x 에서 analyze 한 결과는 아래와 같습니다.

울퉁불퉁(N),하(t),ㄴ(e)/70:2

울퉁/N

불퉁/N


이게 무슨 문제가 되느냐고 할 수 있는데

실제 색인을 실행 하면 position 정보가 5.x 에서 뒤집혀져 색인 되지 않는 문제를 보실 수 있습니다.


5.x 에서 _analyze 한 결과는 아래와 같습니다.

{

  "tokens" : [

    {

      "token" : "울퉁불퉁한",

      "start_offset" : 0,

      "end_offset" : 5,

      "type" : "korean",

      "position" : 0

    },

    {

      "token" : "울퉁불퉁",

      "start_offset" : 0,

      "end_offset" : 4,

      "type" : "korean",

      "position" : 0

    },

    {

      "token" : "울퉁",

      "start_offset" : 0,

      "end_offset" : 2,

      "type" : "korean",

      "position" : 0

    },

    {

      "token" : "한",

      "start_offset" : 4,

      "end_offset" : 5,

      "type" : "korean",

      "position" : 1

    },

    {

      "token" : "불퉁",

      "start_offset" : 2,

      "end_offset" : 4,

      "type" : "korean",

      "position" : 2

    }

  ]

}


2.x 에서 _analyze 한 결과는 아래와 같습니다.

{

  "tokens" : [ {

    "token" : "울퉁불통",

    "start_offset" : 0,

    "end_offset" : 4,

    "type" : "korean",

    "position" : 0

  }, {

    "token" : "울퉁",

    "start_offset" : 0,

    "end_offset" : 2,

    "type" : "korean",

    "position" : 0

  }, {

    "token" : "불통",

    "start_offset" : 2,

    "end_offset" : 4,

    "type" : "korean",

    "position" : 1

  } ]

}


보이시나요?

어디가 다르고 문제가 되는지?


해결 방법은 CompoundNounAnalyzer 의 setDivisibleOne 설정을 false 로 하시면 위와 같은 문제를 해결 하실 수 있습니다.

2.x 에서는 KoreanFilter 쪽에 조건문이 있었는데 5.x 에서는 주석 처리가 되어 있더라구요.

또는 이것 저것 다 귀찮다고 하시면 그냥 '한' 에 대한 불용어 처리를 하셔도 될 것 같습니다.

저작자 표시 비영리 변경 금지
신고
Trackback 0 : Comment 0

[미미박스 검색이야기] 검색 홈 개인화 추천 서비스 오픈!!

ITWeb/미미박스검색이야기 2017.03.31 16:07

3월의 마지막 드디어 미미박스 검색 홈에 개인화 추천 상품 서비스가 오픈이 되었습니다.


구경하러 가기)

https://m.search.memebox.com


추천 상품을 다양하게 보고 싶으시다면 검색 기능 활용을 많이 해보시면 좋습니다.

대부분의 추천 상품들은 협업필터를 이용해서 구성이 되어 있습니다.


2. 비슷한 취향의 고객님이 선택한 상품

이 기능은 user to user CF를 이용해서 추출 하였습니다.

저희는 데이터의 규모가 크지 않아서 sampling 을 100% 로 적용했습니다.


4. 많이 본 상품과 연관된 추천상품

이 기능은 item to item CF를 이용해서 추출 하였습니다.


각 추천 영역별 설명은 아래 이미지를 참고 하시면 됩니다.


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

저작자 표시 비영리 변경 금지
신고
Trackback 0 : Comment 0

[미미박스 검색이야기] PC웹 검색 결과 내 검색어 추천 상품 제공

ITWeb/미미박스검색이야기 2017.03.16 12:33

작년 10월에 만들어 놨던 추천 데이터 마트 인데 이제야 겨우 PC웹에만 적용이 되었습니다.

우선 검색어 추천 상품은 어떻게 만들어 질까요?


기본 데이터 생성 로직은 아래와 같습니다.


Step 1)

검색을 한 사용자들의 검색어 로그를 수집 합니다.


Step 2)

검색 결과에서 클릭이 발생한 상품 정보를 수집 합니다.


Step 3)

검색어 + 클릭이 발생한 상품 정보에 대한 통계 분석을 하고 RDBS 에 저장 합니다.


Step 4) 

저장된 데이터를 서비스하기 위해 별도 색인 및 API 서버로 데이터를 제공 합니다.


이 과정을 거쳐 아래와 같은 결과가 나오게 됩니다.


검색어)

메이크업


결과)


사실 보통 검색어 별 최대 20개 까지의 추천 상품을 만들어 놓게 되는데요.

왜 3개만 보여 주고 있는지 저는 이해할 수 없지만, 추후 개선해 보자고 설득해 보려 합니다.

만들어진 데이터는 더보기 버튼을 넣어서 보여 주는게 더 좋겠다는 개인적인 생각 입니다.

더 보고 싶은 고객은 더 볼 것이고 보고 싶지 않은 고객은 안 볼 것이고 만들어 놓고 그냥 포기 하는건 지금도 이해가 잘 안되내요.


더 좋은 추천 상품을 제공 할 수 있도록 노력하겠습니다. ^^


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


저작자 표시 비영리 변경 금지
신고
Trackback 0 : Comment 0