代码之家  ›  专栏  ›  技术社区  ›  Sajna

在elastic Serach中使用JestClient检索特定文件

  •  1
  • Sajna  · 技术社区  · 7 年前

    我在弹性搜索中存储了以下文档

    {"Book_Id" : "102" ,"Book_Name" : "Alice in wonderLand", "Review_Text" :"DescentRead","Rating_Percentage" :"100" }'
    {"Book_Id" : "102" ,"Book_Name" : "Alice in wonderLand", "Review_Text" :"For Kids","Rating_Percentage" :"50" }'
    {"Book_Id" : "103" ,"Book_Name" : "Blah Blah", "Review_Text" :"Great","Rating_Percentage" :"100" }'
    

    我只想搜索并检索一个字段(在本例中查看文本)作为输出。我正在使用以下代码

    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();  
    searchSourceBuilder.query(QueryBuilders.matchQuery("Book_Id", "102"))
            .fields("_source.Review_Text");
    Search search = new Search.Builder(searchSourceBuilder.toString())
                    .addIndex("reviews")
                    .addType("bookreview")
                    .build();
    

    但我一直在犯错误-

    {"error":{"root_cause":[{"type":"parsing_exception","reason":"Deprecated field [fields] used, expected [stored_fields] instead","line":10,"col":14}],
    

    这里缺少什么?否则我们如何只检索特定的文件而不是作为Json检索所有字段

    1 回复  |  直到 4 年前
        1
  •  1
  •   Val    7 年前

    访问 fields source filtering

    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();  
    searchSourceBuilder.query(QueryBuilders.matchQuery("Book_Id", "102"))
            .fetchSource("Review_Text", null);                    <-- change this line
    Search search = new Search.Builder(searchSourceBuilder.toString())
                    .addIndex("reviews")
                    .addType("bookreview")
                    .build();