首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在lucene中,如何从搜索查询中查找仅包含单词的文档

在lucene中,如何从搜索查询中查找仅包含单词的文档
EN

Stack Overflow用户
提问于 2019-08-29 19:25:56
回答 1查看 62关注 0票数 0

索引的文档包括:

1)有经验2)有经验3)有经验4)精通5)知识6)有7)丰富的知识8)有9)负责的知识

如果我的搜索查询是“具有以下经验的候选人”,那么应该只检索前3个文档。即只包含来自搜索查询的单词的文档。例如,考虑到第4个文档,搜索查询中不存在“熟练程度”,则不应检索它。

我尝试了使用BooleanQuery的with子句。但它也返回部分匹配文档(4-6)。

代码语言:javascript
复制
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号文件。

EN

回答 1

Stack Overflow用户

发布于 2019-09-03 22:12:41

1)创建一个包含所有可能单词的词汇表2)为查询中的单词以外的所有单词添加must_not。

代码语言:javascript
复制
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流功能并尝试对其进行优化。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57709138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档