java - Lucene MultiFieldQueryParser 不起作用
问题描述
我不明白为什么查询不起作用。
我需要按两个字段搜索文档。两个 ID。如果 2 个值匹配,则需要搜索文档。ID1 和 ID2
但我得到一个空的结果。
query = MultiFieldQueryParser.parse(new String[]{id1, id2},
new String[]{"ID1", "ID2"},
new SimpleAnalyzer());
TopDocs topDocs = searcher.search(query, 1);
Document doc = searcher.doc(topDocs.scoreDocs[0].doc)
该指数100%有效。由其他请求验证。
谢谢您的帮助。
解决方案
由于您只想在两个单独的查询之间执行 AND 交集 - 而不是真正执行 MultiFieldQuery(您在多个字段中搜索相同的值),因此应该稍微修改一下Lucene 中显示的版本或使用布尔查询进行搜索工作:
BooleanQuery bothQuery = new BooleanQuery();
// field, value
TermQuery idQuery1 = new TermQuery(new Term("ID1", "id1"));
TermQuery idQuery2 = new TermQuery(new Term("ID2", "id2"));
bothQuery.add(new BooleanClause(idQuery1, BooleanClause.Occur.MUST));
bothQuery.add(new BooleanClause(idQuery2, BooleanClause.Occur.MUST));
TopDocs topDocs = searcher.search(bothQuery, 1);
Document doc = searcher.doc(topDocs.scoreDocs[0].doc)
推荐阅读
- swift - Xcode 错误:缺少必需的模块“Firebase”
- javascript - React-Native:从后端获取主题变量
- regex - 从 Loadrunner 中的多个下拉列表中捕获响应值
- python - 烧瓶如何从另一个文件中获取配置元素(例如:helper.py)
- android - 库提供 java.lang.NoClassDefFoundError
- react-native - 每次 UI 在 React Native 中重新渲染时,样式表都会重新加载吗
- javascript - 将图像上传到网站,但 PHP $_FILES 数组为空。
- java - 如何在 Android 上为 Room 库设置 proguard 规则
- validation - 无法验证颤振/飞镖中的强制输入字段小部件
- d - 如何过早退出 std.algorithm.iteration.reduce?