6

「名前」:「カイ」「年齢」:「23」「場所」:「デリー、インド」「タグ」:[「検索」、「nosql」]などのフィールドを持つユーザーを持つelasticsearchインデックスがあります.

ユーザーのすべてのフィールドで複数の文字列をクエリしたい (例: ["nosql","delhi"])。Java API を使用することは可能ですか?

ここに私が使用しているコードのサンプルがあります。(しかし、それは質問とは関係ありません) 私が今使っているオブジェクトを知るだけです。

BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery()
                .must(QueryBuilders.matchAllQuery());
        if(location!=null) {
            queryBuilder.must(QueryBuilders.matchQuery("location",location));
        }
        BoolFilterBuilder filerBuilder=FilterBuilders.boolFilter();     
        for(String skill:skills){
            filerBuilder.must(FilterBuilders.rangeFilter("tags."+skill).from(0));
        }
        filerBuilder.must(FilterBuilders.queryFilter(queryBuilder));
        if(age!=null) {
            filerBuilder.must(FilterBuilders.rangeFilter("age").from(age[0]).to(age[1]));
        }
        SearchResponse response = client.prepareSearch("skillbin")
                .setTypes("stackdump")
                .setSearchType(SearchType.QUERY_AND_FETCH)
                .setQuery(queryBuilder)   
                .setPostFilter(filerBuilder)
                .addSort("reputation", SortOrder.DESC)
                .execute()
                .actionGet();
        SearchHits hits=response.getHits(); 

前もって感謝します。:)

4

3 に答える 3

8

Java API では、デフォルトでドキュメントのすべてのフィールドが含まれる「_all」フィールドに対してクエリを実行できます。別の方法は、より柔軟で、照会するフィールドのリストを指定できるMultiMatchQueryを使用することです。

「_all」フィールドにアクセスする方法と、MultiMatchQueryBuilderおよびQueryBuildersを使用してMultiMatchQueryを作成する方法のサンプル コードを次に示します。すべてのフィールドを検索するためのクエリに沿ったmultiMatchQuery :

String queryString = "nosql delhi";

String allField = "_all";

MultiMatchQueryBuilder mmqb = QueryBuilders.multiMatchQuery(queryString, allField);
于 2015-01-14T20:55:45.107 に答える