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

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

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

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

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

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

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


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

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


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


구경하기)

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



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

저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 : Comment 0

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

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

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


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

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


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

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


구경하러가기)

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

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




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

저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
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 에서는 주석 처리가 되어 있더라구요.

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

저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 : Comment 0

[Java] Array Value 존재 유무 확인하기

ITWeb/개발일반 2017.04.18 10:38

생각 나지 않을때가 많아서 퍼왔습니다.


Originanl Source)

http://www.programcreek.com/2014/04/check-if-array-contains-a-value-java/


public static boolean useList(String[] arr, String targetValue) {

  return Arrays.asList(arr).contains(targetValue);

}


public static boolean useSet(String[] arr, String targetValue) {

  Set<String> set = new HashSet<String>(Arrays.asList(arr));

  return set.contains(targetValue);

}


public static boolean useLoop(String[] arr, String targetValue) {

  for(String s: arr){

    if(s.equals(targetValue))

      return true;

  }

  return false;

}


public static boolean useArraysBinarySearch(String[] arr, String targetValue) { 

  int a =  Arrays.binarySearch(arr, targetValue);

  if(a > 0)

    return true;

  else

    return false;

}


binary search 가 제일 성능이 좋습니다.

단, 위 코드에서 빠진게 있다면 Arrays.sort(arr) 를 먼저 하고 하셔야 된다는 것입니다.


Arrays.sort(arr);

int a = Arrays.binarySearch(arr, targetValue);

저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
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를 이용해서 추출 하였습니다.


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


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

저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 : Comment 0

티스토리 툴바