3

elaticsearch で Java API を使用して検索しているときに、1 つの列だけを取得したいと考えています。現在、Java API を使用してクエリを実行すると、次のようなレコード全体が返されます。[{_id=123-456-7890, name=Wonder Woman, gender=FEMALE}, {_id=777-990-7890, name=Cat Woman, gender=FEMALE}]

上記のレコードは、 th に示されている検索条件に正しく一致します。以下のコードに示すように:

        List<Map<String, Object>> result = new ArrayList<Map<String, Object>>();


        SearchRequestBuilder srb = client.prepareSearch("heros")
                .setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
        MatchQueryBuilder mqb;

        mqb = QueryBuilders.matchQuery("name", "Woman");
        srb.setQuery(mqb);
        SearchResponse response = srb.execute().actionGet();
        long totalHitCount = response.getHits().getTotalHits();

        System.out.println(response.getHits().getTotalHits());

        for (SearchHit hit : response.getHits()) {          
            result.add(hit.getSource());
        }

        System.out.println(result);

1列だけ返してほしい。名前を検索すると、完全な名前をリストに戻したいだけです"Wonder Woman", "Cat Woman"。それぞれのjsonレコード全体だけではありません。Java でマップのリストを反復処理する必要があると思われるresult場合は、この場合の方法の例を提案してください。

4

4 に答える 4

5

ドキュメントに従って、検索から返されるフィールドを指定できます。これは、次のように設定できますSearchRequestBuilder.addFields(String... fields)

    SearchRequestBuilder srb = client.prepareSearch("heros")
            .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
            .addFields("name");
于 2013-08-29T16:10:39.597 に答える
3

私はそれを考え出した。

    List<String> valuesList= new ArrayList<String>();
            for (SearchHit hit : response.getHits()) {                      
    result.add(hit.getSource());
    valuesList.add(hit.getSource().get("name").toString());         
}
于 2013-08-29T17:33:30.687 に答える