2017-12-03 5 views
0

私はElasticSearchを初めて利用しています。 UserクラスにUserStatusを表す文字列フィールドがあり、特定のステータスのすべてのユーザーを検索する必要があります。 リレーショナルDBでは、それはまさに "どこに.."です。"where .. in" Java APIを使用したanalog elasticsearch

さまざまな組み合わせでtermsQueryを使用して例を見ましたが、それらを機能させることはできませんでした(クエリは何も返しませんでした)。

したがって、問題は次のとおりです。例全体またはそのような問題に直面した誰かを示すリンクがありますか? 喜んで助けてください!

//エンティティ自体

@AllArgsConstructor 
    @NoArgsConstructor 
    @Data 
    @Builder 
    @Document(indexName = "users", type = "user") 
    public class User { 

     @Id 
     private String id; 

     private String userStatus; 
     private String firstName; 
     private String lastName; 
     private Date dateCreated; 
    } 

//春のサービスメソッド

@Override 
public List<User> findByParams(UserSearchRequest userSearchRequest) { 

    TermsQueryBuilder termsQueryBuilder = QueryBuilders 
      .termsQuery("userStatus", userSearchRequest.getUserStatuses()); 


    SearchQuery searchQuery = new NativeSearchQueryBuilder() 
      .withQuery(boolQuery().must(termsQueryBuilder)) 
      .withPageable(new PageRequest(0, 100)) 
      .build(); 


    return Lists.newArrayList(userRepository.search(searchQuery)); 

} 

// REST要求オブジェクト

@AllArgsConstructor 
@NoArgsConstructor 
@Data 
public class UserSearchRequest { 
    private List<String> userStatuses; 
} 
+1

は、あなたの代わりにJavaの経由のelasticsearchする直接クエリ(カールまたはWebベースのUIのいくつかの並べ替え)を実行しようとしています?通常それは私を助けるものです – sfat

+0

私は@sfatに同意し、直接弾性検索クエリを試してみてください。以下は、特定の条件に基づいて値の値を取得するためのクエリです。 – Sree

+0

クエリの例を次に示します。{"constant_score":{"filter":{"bool":{"should":[{"term":{"employee": "foo"}}}} }}}。メソッド - >投稿、URL - > http:// localhost:9200///_search。 – Sree

答えて

0

Elasticsearchのマニュアルを参照してください"Finding Multiple Exact Values"

基本的には、用語searchinを一定のスコアクエリにラップする必要があります。 Elasticsearchドキュメント(後世のために保つために)

GET /my_store/products/_search 
{ 
    "query" : { 
     "constant_score" : { 
      "filter" : { 
       "terms" : { 
        "price" : [20, 30] 
       } 
      } 
     } 
    } 
} 

この例から

は、価格を持っている製品を検索すると言うのいずれか欲しいものを20または30

が持っているすべてのユーザーを検索していますuserStatusのいずれかの値をListとして渡します。あなたはこのようなもので、あなたのNativeSearchQueryBuilderを変更する必要があり、実装の観点から

SearchQuery searchQuery = new NativeSearchQueryBuilder() 
       .withQuery(constantScoreQuery(termsQueryBuilder)) 
       .withPageable(new PageRequest(0, 100)) 
       .build(); 
関連する問題