1

弾性と弾性データ弾性の新機能です。私はここやウェブの他の分野を探していますが、これまで私の質問に対する答えを見つけることができませんでした。私はSOが手伝ってくれることを願っています。春データ弾性で弾性を照会する方法

私は私のUsersテーブル(firstNameの、lastNameの)からいくつかのレコードをインデックスしていると私は、高度な検索を可能にすることができるように探しています。たとえば、名前が「Frances」で、「Frank」と入力すると、システムはレコードを返すほどスマートです。など「ロビンソン」と「Robinsen」のために同じ

私はセットアップ私のPOJOには、以下べきました:

Public Users { 
    @Field(fieldType = FieldType.String) 
    private String firstName; 

    @Field(fieldType = FieldType.String) 
    private String lastName 

    // mutators 
    ... 

} 

現在、私は私の検索を行うには、スプリング・データ・弾性ElasticRepositoryを使用しています、高度な検索が可能になるならば、私はおそらく変化しなければならないと私は信じています。 1つの選択肢はEntityManagerまたはTemplateを直接UserServiceに使用することですが、私はまだそれをやっていく方法についてはわかりません。

私はこの問題を説明してきたように、これはおそらく、インデックスの問題や検索の問題、またはその両方でしょうか?私は仕事をする誰かを探しているわけではなく、ちょうど私を正しい方向に向ける。

ありがとうございます!

+0

あなたはhttp://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#elasticsearch.query-methodsを見たことがありますか? ところで、EntityManagerはJPAのコンセプトであり、elasticsearchのコンセプトではありません。そのため、その方向で検索することに意味はありません。 – GPI

+0

あなたは正しいです、それはJPAのコンセプトなので、ここには合いません。あなたがリンクしているドキュメントを読んだことがありますが、あまりにも曖昧なロジックを許可するように設定する方法はまだ分かりません。クエリの問題ですか?インデックス作成の問題?ドメインエンティティを変更する必要がありますか? – Dan

+0

クイック検索では、メソッド名から自動*ファジー*クエリ生成を行う方法はありませんが、[criteria based](http://docs.spring.io/spring-data/elasticsearch/docs /current/api/org/springframework/data/elasticsearch/core/query/Criteria.html#fuzzy-java.lang.String-)onesまたは[手書き](http://docs.spring.io/spring-data) /elasticsearch/docs/current/reference/html/#elasticsearch.query-methods.at-query)。 – GPI

答えて

3

まず、だから我々は、カスタムリポジトリメソッドの追加を使用する必要があります限りdocumentation tells

として、自動ファジークエリ生成のためのサポートがありません。

(これはすべてのstandard Spring data、特に何もないです)お使いのベースリポジトリがあなたがあなたのカスタムメソッドを追加するには、カスタムリポジトリのインターフェースを作成する必要があります

@Repository 
public interface UserRepository extends CrudRepository<UserEntity, Long> 

ある

public interface UserRepositoryCustom { 
    public List<User> findFuzzyByLastNameAndFirstName(String firstName, String lastName); 
} 

を言って、あなたを作ります歴史的なレポは、このインタフェースを実装しています:

@Repository 
public interface UserRepository extends CrudRepository<UserEntity, Long>, UserRepositoryCustom 

さて、 "カスタム"インターフェースを何とか実装する必要があります。これは簡単です(もう一度マニュアルを参照してください、あなたは春には、実行時にインタフェースと実装を配線できるように、スキームに名前を付ける尊重しなければならない):

public class UserRepositoryCustomImpl implements UserRepositoryCustom { 
    @Autowired protected ElasticsearchTemplate elasticsearchTemplate; 

    public List<User> findFuzzyByLastNameAndFirstName(String firstName, String lastName) { 
     Criteria c = new Criteria("firstName").fuzzy(firstName).and(new Criteria("lastName").fuzzy(lastName)); 
     return elasticsearchTemplate.queryForList(new CriteriaQuery(c), CandidateEntity.class); 
    } 
} 

再コンパイル、リニューアル、あなたはあなたのリポジトリがやる持つことができるはずですそのようなあいまいな検索。

はその後、再び、あなたはまた、文字列としてクエリを定義することもできます(質問のコメントを参照)、あなたはカスタム実装を必要としません。これはあなた次第です。