Document은 empName, empId, departmentId etc
과 같이 여러 개의 필드 이름을 가진 회사의 직원 데이터입니다.여러 FuzzyQuery가있는 Lucene BooleanQuery가 너무 느림
맞춤 분석기를 사용하면 약 4 백만 개의 데이터가 색인 생성됩니다.
검색 쿼리에 list
of
employees'
name
이 있고 목록의 모든 직원이 같은 부서에 속해 있다는 것을 알고 있습니다. 회사에 여러 부서가 있습니다.
그래서 모든 직원의 이름이 department id
인 경우 fuzzy search
으로하고 싶습니다.
Query termQuery = new TermQuery(new Term("departmentId","1234"));
BooleanQuery.Builder bld = new BooleanQuery.Builder();
for(String str:employeeNameList) {
bld.add(new FuzzyQuery(new Term("name",str)), BooleanClause.Occur.SHOULD);
}
BooleanQuery bq = bld.build();
BooleanQuery finalBooleanQeury = new BooleanQuery.Builder()
.add(termQuery, BooleanClause.Occur.MUST)
.add(bq, BooleanClause.Occur.MUST).build();
지금 IndexSearcher
의 search
방법 내부 finalBooleanQeury
을 전달하고 결과를 얻는이 들어
의 경우 이 너무 많아서 employeeName 목록의 크기가 more than 50
일 때 검색에 약 500 ms
이 걸릴 수 있습니다.
500 ms
에서 50 ms
까지 시간을 줄이려면 어떻게해야합니까?
이 문제에 대한 다른 해결책이 있습니까?
왜 모든 직원에 대해 부울 절을 추가하나요? – Mysterion
@Mysterion이 일을하는 다른 방법이 있습니까? –