1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/consolelog-chinese_translation_of_elasticsearchjavaapi

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
JoiningQueries.md 3.1 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
王斌 Отправлено 22.05.2019 09:50 3cfb745

关联关系查询

在ES这样的分布式系统中使用SQL风格的关联语句对性能的损耗是非常大的。所以,ES提供了两种支持水平拓展的关联操作。

nested查询

  • 文档可能包含 nested 类型的字段。这些字段用于索引对象数组,其中每个对象都可以作为独立文档进行查询(使用 nested 查询)。

has_childhas_parent查询

  • 同一索引之中的文档可以存在父子关系。 has_child 查询会返回子文档匹配的父文档,而 has_parent 查询则会返回父文档匹配的子文档。

Nested查询

查看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);   

HasChild查询

查看Has Child Query

使用 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);   

HasParent查询

查看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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/consolelog-chinese_translation_of_elasticsearchjavaapi.git
git@api.gitlife.ru:oschina-mirror/consolelog-chinese_translation_of_elasticsearchjavaapi.git
oschina-mirror
consolelog-chinese_translation_of_elasticsearchjavaapi
consolelog-chinese_translation_of_elasticsearchjavaapi
master