文档是具有多个字段名(如:empName, empId, departmentId etc )的公司的员工数据。
使用自定义分析器已经索引了大约400万个数据。
搜索查询有一个list of employees' name,并且知道列表中的所有员工都属于同一个部门。公司有多个部门。
所以我想为所有员工的名字做fuzzy search,因为我的名字是给定的department id。
为此,我使用布尔查询,如下所示:
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 finalBooleanQuery = new BooleanQuery.Builder()
.add(termQuery, BooleanClause.Occur.MUST)
.add(bq, BooleanClause.Occur.MUST).build();现在,在finalBooleanQuery的search方法中传递IndexSearcher并得到结果。
问题在于它花费了太多的时间,当employeeNameList more than 50的大小需要500 ms来搜索时。
如何减少从500 ms到50 ms的时间?
这个问题还有别的解决办法吗?
发布于 2017-10-11 15:40:58
如果您查看FuzzyQuery的其他构造函数,您将看到一些改进性能的简单方法。每增加一个参数,您就可以减少FuzzyQuery将要做的工作量,从而提高性能。
首先,也是最重要的:
其他可用的参数也可以帮助:
https://stackoverflow.com/questions/46686374
复制相似问题