世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。
问 :如何实现多域搜索?
答 :使用 MultiFieldQueryParser
public void articleSearchServiceTest() throws ParseException {
ArticleSearchService articleSearchService =
ServiceBindCache.getBean(ArticleSearchService.class);
Map<String, Float> boosts = new HashMap<>();
boosts.put("title", 10F);
boosts.put("content", 1F);
QueryParser parser = new MultiFieldQueryParser(
new String[]{"title", "content"},
new StandardAnalyzer(), boosts);
Query query = parser.parse("白日");
Result result = articleSearchService.search(indexRoot, query, 10);
result.getDocs().forEach(doc -> {
System.out.println("title : " + doc.get("title") + " " +
"content : " + doc.get("content"));
});
}
# 结果
title : 白日夜话 content : 我心安处即吾乡
title : 登鹳雀楼 content : 白日依山尽,黄河入海流。欲穷千里目,更上一层楼。
title : 登鹳雀楼 content : 白日依山尽,黄河入海流。欲穷千里目,更上一层楼。
title : 登鹳雀楼 content : 白日依山尽,黄河入海流。欲穷千里目,更上一层楼。
title : 望庐山瀑布 content : 日照香炉生紫烟,遥看瀑布挂前川。飞流直下三千尺,疑是银河落九天。
title : 望庐山瀑布 content : 日照香炉生紫烟,遥看瀑布挂前川。飞流直下三千尺,疑是银河落九天。
title : 望庐山瀑布 content : 日照香炉生紫烟,遥看瀑布挂前川。飞流直下三千尺,疑是银河落九天。