在ES这样的分布式系统中使用SQL风格的关联语句对性能的损耗是非常大的。所以,ES提供了两种支持水平拓展的关联操作。
查看Nested Query。
nestedQuery(
//嵌套文档的路径
"obj1",
//查询中使用的所有字段都必须使用完整路径
boolQuery()
.must(matchQuery("obj1.name", "blue"))
.must(rangeQuery("obj1.count").gt(5)),
//评分模式支持:ScoreMode.Max、ScoreMode.Min、ScoreMode.Total、ScoreMode.Avg 和 ScoreMode.None
ScoreMode.Avg);
使用 has_child 查询的时候有一点很重要的就是使用 PreBuiltTransportClient 而不是普通的 client。
Settings settings = Settings.builder().put("cluster.name", "elasticsearch").build();
TransportClient client = new PreBuiltTransportClient(settings);
client.addTransportAddress(new InetSocketTransportAddress(new InetSocketAddress(InetAddresses.forString("127.0.0.1"), 9300)));
否则父链接模块将不会被加载,并且[TransportClient]中不能使用 has_child 查询。
JoinQueryBuilders.hasChildQuery(
//需要查询的子查询
"blog_tag",
termQuery("tag","something"),
//评分模式支持:ScoreMode.Avg、ScoreMode.Max、ScoreMode.Min、ScoreMode.None 和 ScoreMode.None
ScoreMode.None);
查看Has Parent。
使用 has_child 查询的时候有一点很重要的就是使用 PreBuiltTransportClient 而不是普通的 client。
Settings settings = Settings.builder().put("cluster.name", "elasticsearch").build();
TransportClient client = new PreBuiltTransportClient(settings);
client.addTransportAddress(new InetSocketTransportAddress(new InetSocketAddress(InetAddresses.forString("127.0.0.1"), 9300)));
否则父链接模块将不会被加载,并且TransportClient中不能使用 has_parent 查询。
JoinQueryBuilders.hasParentQuery(
"blog",
termQuery("tag","something"),
//是否将父文档匹配分数传递给子文档
false);
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )