首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >弹性搜索中的复杂查询

弹性搜索中的复杂查询
EN

Stack Overflow用户
提问于 2017-03-17 06:41:51
回答 1查看 536关注 0票数 0

假设我们有一个实体“设备”--它包含其他实体"DeviceInfo",我们有一个实体"Site“,其中包含"DeviceInfo”实体的列表,而“DeviceInfoE 29在其属性中有”E 110设备E 211和“E 112站点E 213”。

我的任务是找到“Device”中的所有"Site“。我会向某个端点发送一个"Site“id和页面的页码和大小(因为它必须是可分页的)。我通过创建JPA规范使它工作起来。

代码语言:javascript
复制
public static Specification<Device> bySearchRequest(final DeviceSearchRequest searchRequest)  {
        return (root, query, cb) -> {
            final Join<Device, DeviceInfo> deviceInfo
                    = root.join(Device_.deviceInfo, JoinType.LEFT);
            final Join<DeviceInfo, Site> site
                    = deviceInfo.join(DeviceInfo_.site, JoinType.LEFT);

            return cb.and(cb.equal(site.get(Site.id), searchRequest.getSiteId()));
        };
    } 

然后使用我将“Device”转换为ES中的设备。

代码语言:javascript
复制
deviceRepository.findAll(currentUser,
                DeviceRepository.Specs.bySearchRequest(searchRequest),
                new PageRequest(searchRequest.getPage(), searchRequest.getSize()))
                .getContent().stream().map(x ->indexedDeviceConverter.convert(x)).collect(Collectors.toList());

就是这样。它起作用了。但是在这里,我从DB中获取数据,我已经在Elasticsearch中获得了所有内容。是否有一种方法可以使同样的查询直接从ES (带有分页的)获取数据?

唯一的区别是,在ES中,"IndexedDevice“与"IndexedSite”有直接关系(没有"IndexedDeviceInfo"). )。

IndexedDevice

代码语言:javascript
复制
{  
  "id":"3eba5104-0c7a-4564-8270-062945cc8f5e",
  "name":"D4",
  "site":{  
        "id":"46e7ada4-3f34-4962-b849-fac59c8fe8ad",
        "name":"SomeSite",
        "displayInformation":"SomeSite",
        "subtitle":""
  },
  "suggest":{  
        "input":[]
  },
  "displayInformation":"D4",
  "subtitle":""
}

IndexedSite

代码语言:javascript
复制
{
   "id": "46e7ada4-3f34-4962-b849-fac59c8fe8ad",
   "name": "SomeSite",
   "displayInformation": "SomeSite",
   "subtitle": ""
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-17 10:14:43

我成功做到了。最后真的很简单。我用的是(org.springframework.data.elasticsearch.repository). ElasticsearchRepository

代码语言:javascript
复制
elasticsearchRepositoy.search(QueryBuilders.termsQuery
                ("site.id",
                searchRequest.getSite()),
                new PageRequest(searchRequest.getPage(),
                searchRequest.getSize()));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42850873

复制
相关文章

相似问题

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