索引的文档包括:
1)有经验2)有经验3)有经验4)精通5)知识6)有7)丰富的知识8)有9)负责的知识
如果我的搜索查询是“具有以下经验的候选人”,那么应该只检索前3个文档。即只包含来自搜索查询的单词的文档。例如,考虑到第4个文档,搜索查询中不存在“熟练程度”,则不应检索它。
我尝试了使用BooleanQuery的with子句。但它也返回部分匹配文档(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号文件。
发布于 2019-09-03 22:12:41
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流功能并尝试对其进行优化。
https://stackoverflow.com/questions/57709138
复制相似问题