索引文档为:
1)经验 2)有经验 3)有经验 4)精通 5)知识 6)经验 7)知识渊博 8)知识 9)负责
如果我的搜索查询是“有经验的候选人”,则仅应检索前3个文档。那是仅包含来自搜索查询的单词的文档。例如,考虑到第4个文档,搜索查询中不存在“熟练程度”,则不应对其进行检索。
我尝试了带有Should子句的BooleanQuery。但是它也返回了部分匹配文件(4-6)。
String[] searchWords = searchQuery.split(" ");
for(String searchWord: searchWords) {
TermQuery tq = new TermQuery(new Term("fieldName",searchWord));
bq.add(new BooleanClause(tq, BooleanClause.Occur.SHOULD));
}
search(bq);
我只需要文件1-3。
答案 0 :(得分:0)
1)用所有可能的单词创建词汇表 2)为查询中的所有单词添加must_not。
ArrayList<String> searchWords = Arrays.asList(searchQuery.split(" "));
for(String searchWord: searchWords) {
TermQuery tq = new TermQuery(new Term("fieldName",searchWord));
bq.add(new BooleanClause(tq, BooleanClause.Occur.SHOULD));
}
for(String word: vocabulary){
if(!searchWords.contains(word)) {
TermQuery tq = new TermQuery(new Term("fieldName",word));
bq.add(new BooleanClause(tq, BooleanClause.Occur.MUST_NOT));
}
}
search(bq);
3)如果遍历词汇表需要时间,请使用Java 8流功能并尝试对其进行优化。