결과내 재검색을 구현 어떻게 할까..
상품을 검색 할 때 일단 "나이키"로 검색을 하고
그안에서 다시 3000~10000 원 사이의 상품을 검색한다..
딱 생각나는 것은 두가지 방안인데..
하나는 쿼리를 다시 생성해서 날리는 방법
즉.. NAME:나이키 로 처음 검색 후 재검색 요청이 들어오면 다시
NAME:나이키 +[PRICE 3000 To 10000] 쿼리를 생성해서 날리는 방법..
또 하나는 필터를 이용하는 방법이 있을 것 같다...
TermQuery nikeTerm = new TermQuery(new Term("NAME","나이키"));
ChainedFilter filter = new ChainedFilter(new Filter[] {new RangeFilter("PRICE", NumberTools.longToString(3000), NumberTools.longToString(10000), true, true)}, new int[] {ChainedFilter.AND});
BooleanQuery bq = new BooleanQuery();
bq.add(nikeTerm, BooleanClause.Occur.MUST);
Hits hits = searcher.search(bq, filter, new Sort("PRICE"));
...
(org.apache.lucene.document.NumberTools)
이런 정도가 되면 될까.....
실제적으로 성능에 어느정도의 차이가 나는지 잘 모르겠다..
또 하나 고민되는 것이 그룹핑 기능인데..
카테고리별 검색 결과 갯수 같은거...
이거 어떻게 해야 할지 좀 난감 -_-ㅋ
상품을 검색 할 때 일단 "나이키"로 검색을 하고
그안에서 다시 3000~10000 원 사이의 상품을 검색한다..
딱 생각나는 것은 두가지 방안인데..
하나는 쿼리를 다시 생성해서 날리는 방법
즉.. NAME:나이키 로 처음 검색 후 재검색 요청이 들어오면 다시
NAME:나이키 +[PRICE 3000 To 10000] 쿼리를 생성해서 날리는 방법..
또 하나는 필터를 이용하는 방법이 있을 것 같다...
TermQuery nikeTerm = new TermQuery(new Term("NAME","나이키"));
ChainedFilter filter = new ChainedFilter(new Filter[] {new RangeFilter("PRICE", NumberTools.longToString(3000), NumberTools.longToString(10000), true, true)}, new int[] {ChainedFilter.AND});
BooleanQuery bq = new BooleanQuery();
bq.add(nikeTerm, BooleanClause.Occur.MUST);
Hits hits = searcher.search(bq, filter, new Sort("PRICE"));
...
(org.apache.lucene.document.NumberTools)
이런 정도가 되면 될까.....
실제적으로 성능에 어느정도의 차이가 나는지 잘 모르겠다..
또 하나 고민되는 것이 그룹핑 기능인데..
카테고리별 검색 결과 갯수 같은거...
이거 어떻게 해야 할지 좀 난감 -_-ㅋ