2017-07-19 337 views
0

我正在使用Elastic Search创建Java应用程序。 这是我的项目的链接。 https://github.com/chanakaDe/ensembl-elastic-rest如何使用ElasticsearchRepository通过Java搜索弹性搜索?

在这个项目中,我已经实现了一个rest控制器来将数据作为JSON。 这是控制器类。现在它只有2种方法。但我需要添加一些像这样的方法。

@RequestMapping(value = "/find-by/{id}/{param1}/{param2}/{param3}", method = RequestMethod.GET) 
public Iterable<Track> findAllWithParams(@PathVariable int id, @PathVariable String param1, @PathVariable String param2, @PathVariable String param3) { 
    return trackService.someMethodWithParams(id, param1, param2, param3); 
} 

我需要做的是从用户需要一定的值,并将其发送到服务器的弹性,并进行搜索。我只是提到了其中的一些链接,并有一些想法。 https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-search.html https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-terms-query.html

TrackService.java和TrackServiceImpl.java由TrackRepository.java实现,它是由ElasticsearchRepository默认类扩展。 https://github.com/chanakaDe/ensembl-elastic-rest/blob/master/src/main/java/com/chanaka/book/repository/TrackRepository.java

我需要通过REST URL获取值并创建一个对象,并将其传递给Elastic Server。我如何用我目前的项目配置来实现?

{ 
"query": { 
    "constant_score" : { 
     "filter" : { 
      "terms" : { "user" : ["kimchy", "elasticsearch"]} 
     } 
    } 
} 

}

这是我TrackService.java接口。

public interface TrackService { 

Track save(Track track); 

Track findOne(int id); 

Iterable<Track> findAll(); 

}

而且也这是TrackService.java实现我的TrackServiceImpl.java类。

public class TrackServiceImpl implements TrackService { 

private TrackRepository trackRepository; 

@Autowired 
public void setTrackRepository(TrackRepository trackRepository) {this.trackRepository = trackRepository;} 

@Override 
public Track save(Track track) { 
    return trackRepository.save(track); 
} 

@Override 
public Track findOne(int id) { 
    return trackRepository.findOne(id + ""); 
} 

@Override 
public Iterable<Track> findAll() { 
    return trackRepository.findAll(); 
} 

}

我是否需要实施一个自定义的方法?还是有像findAll()和findOne()这样的默认方法? 只需传递一个对象并获得值?

+0

伙计们没有人回答我:( –

回答

0

我认为,没有这种现有方法,您需要使用QueryBuilders.wrapperQuery(query.toString())ElasticsearchTemplate来创建自己的方法。只需注意,wrapperQuery只支持查询不过滤。但是您可以使用constant_score来实现过滤器上下文查询。