如何使用ElasticsearchRepository通过Java搜索弹性搜索?

时间:2017-07-19 17:52:15

标签: java spring rest elasticsearch

我正在使用Elastic Search创建Java应用程序。 这是我项目的链接。 https://github.com/chanakaDe/ensembl-elastic-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);
}

我需要做的是从用户那里获取一些值并将它们发送到Elastic服务器并进行搜索。我只是提到了一些这些链接并得到了一些想法。 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()? 只需传递一个对象并获取值?

1 个答案:

答案 0 :(得分:0)

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