A Document是一個公司的僱員數據,其名稱如下:empName, empId, departmentId etc
。具有多個FuzzyQuery的Lucene BooleanQuery速度太慢
使用自定義分析器已經索引了大約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 finalBooleanQeury = new BooleanQuery.Builder()
.add(termQuery, BooleanClause.Occur.MUST)
.add(bq, BooleanClause.Occur.MUST).build();
現在通過finalBooleanQeury
內search
方法IndexSearcher
並得到結果。
問題在於其採取太多時間,當employeeNameList more than 50
的大小需要大約500 ms
進行搜索。
如何將時間從500 ms
減少到50 ms
?
這個問題還有其他解決方案嗎?
爲什麼你要爲每個員工添加布爾子句? – Mysterion
@Mysterion有沒有其他方法可以做到這一點? –