2017-07-19 10 views
0

私はElastic Searchを使用してJavaアプリケーションを作成しています。 ここに私のプロジェクトのリンクがあります。 https://github.com/chanakaDe/ensembl-elastic-restElasticsearchRepositoryを使用してJava経由で弾性検索を検索するには?

このプロジェクトでは、データを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()のようなデフォルトメソッドがありますか? オブジェクトを渡して値を取得するだけですか?

+0

私に答える人は誰もいません:( –

答えて

0

私はこのような既存の方法はなく、QueryBuilders.wrapperQuery(query.toString())ElasticsearchTemplateを使用して独自の方法を作成する必要があると思います。注意するだけで、wrapperQueryはフィルタリングしないクエリのみをサポートしています。しかし、constant_scoreでフィルタコンテキストクエリを実現できます。