Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中使用lambda表达式编写弹性搜索代码_Java_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Elastic Stack - Fatal编程技术网 elasticsearch,elastic-stack,Java,elasticsearch,Elastic Stack" /> elasticsearch,elastic-stack,Java,elasticsearch,Elastic Stack" />

如何在java中使用lambda表达式编写弹性搜索代码

如何在java中使用lambda表达式编写弹性搜索代码,java,elasticsearch,elastic-stack,Java,elasticsearch,Elastic Stack,像C#(NEST)一样,我们如何在JAVA中使用lambda表达式编写弹性搜索查询。下面是我使用ElasticSearchJava客户端(HighlevelRestClient)编写的附加代码。如何使用lambda编写代码以降低以下代码的复杂性 static Map<String,float> fields1=new HashMap<>(); map.put("field1",1f); ... ... .. ... public static List

像C#(NEST)一样,我们如何在JAVA中使用lambda表达式编写弹性搜索查询。下面是我使用ElasticSearchJava客户端(HighlevelRestClient)编写的附加代码。如何使用lambda编写代码以降低以下代码的复杂性

static Map<String,float> fields1=new HashMap<>();
map.put("field1",1f);
...
...
..
...
public static List<Result> getSearch(QueryFilter[] qf,List<String> filter2,String input,String filter3) {
    SearchRequest searchRequest = new SearchRequest(esIndex);
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
    boolQueryBuilder.
    should(new MultiMatchQueryBuilder(input).minimumShouldMatch("2").type("phrase").boost(5f).fields(fields1)).
    should(new MultiMatchQueryBuilder(input).type("phrase").boost(5f).fields(fields2)).
    should(new MultiMatchQueryBuilder(input).operator(Operator.AND).type("cross_fields").fields(fields2)).
    should(new MultiMatchQueryBuilder(input).operator(Operator.OR).type("cross_fields").fields(fields3)).
    should(new MultiMatchQueryBuilder(input).fuzziness("AUTO").type("best_fields").fields(fields4));

    if(filter!=null && filter.length>0) {
        BoolQueryBuilder boolFieldQuery = new BoolQueryBuilder();
        for (QueryFilter qf : filter) {
            boolFieldQuery.must(QueryBuilders.matchQuery(qf.getName(), qf.getValue()));

        }
        boolQueryBuilder.filter(boolFieldQuery);
    }

    if(!(filter2==null || filter2.isEmpty())) {
        if(filter3==null || filter3.isEmpty() ) {
            for (String string : filter2) {
                boolQueryBuilder.should(new MultiMatchQueryBuilder(string).type("phrase_prefix").boost(10f).field("field1").field("field2"));
            }
            
        }
        else {
            for (String string : filter2) {
                boolQueryBuilder.should(new MultiMatchQueryBuilder(string).type("phrase_prefix").boost(10f).field(filter3));
            }
        }
    }
    
        searchSourceBuilder.query(boolQueryBuilder).size(50).from(0).sort(new ScoreSortBuilder().order(SortOrder.DESC));
        searchRequest.source(searchSourceBuilder);
        try {
            SearchResponse searchResponse = esclient.search(searchRequest, RequestOptions.DEFAULT);
            SearchHit[] hits = searchResponse.getHits().getHits();
            return Arrays.stream(hits).map(hit -> convert(hit.getSourceAsString(), Result.class)).collect(Collectors.toList());
        } catch (Exception e) {
            e.printStackTrace();
            return new ArrayList<>();
        }
    }


public static <T> T convert(String string, Class<T> pojo) {
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        try {
            return objectMapper.readValue(string, pojo);
        } catch (IOException e) {
            throw new UncheckedIOException(e);
        }
    }
静态映射字段s1=newhashmap();
地图放置(“现场1”,1f);
...
...
..
...
公共静态列表getSearch(QueryFilter[]qf,列表过滤器2,字符串输入,字符串过滤器3){
SearchRequest SearchRequest=新的SearchRequest(esIndex);
SearchSourceBuilder SearchSourceBuilder=新的SearchSourceBuilder();
BoolQueryBuilder BoolQueryBuilder=QueryBuilders.boolQuery();
boolQueryBuilder。
应该(新的MultiMatchQueryBuilder(输入).minimumShouldMatch(“2”).type(“短语”).boost(5f).fields(fields1))。
应该(新的MultiMatchQueryBuilder(输入).type(“短语”).boost(5f).fields(fields2))。
应该(新的MultiMatchQueryBuilder(输入).operator(operator.AND).type(“交叉字段”).fields(fields2))。
应该(新的MultiMatchQueryBuilder(输入).operator(运算符.OR).type(“交叉字段”).fields(字段s3))。
应该(新的MultiMatchQueryBuilder(输入).fuzziness(“自动”).type(“最佳字段”).fields(fields4));
if(filter!=null&&filter.length>0){
BoolQueryBuilder boolFieldQuery=新建BoolQueryBuilder();
用于(查询过滤器qf:过滤器){
boolFieldQuery.must(QueryBuilders.matchQuery(qf.getName(),qf.getValue());
}
过滤器(boolFieldQuery);
}
if(!(filter2==null | | filter2.isEmpty()){
if(filter3==null | | filter3.isEmpty()){
用于(字符串:过滤器2){
boolQueryBuilder.should(新的MultiMatchQueryBuilder(字符串).type(“短语前缀”).boost(10f).field(“field1”).field(“field2”);
}
}
否则{
用于(字符串:过滤器2){
boolQueryBuilder.should(新的MultiMatchQueryBuilder(字符串).type(“短语前缀”).boost(10f).field(filter3));
}
}
}
searchSourceBuilder.query(boolQueryBuilder).size(50).from(0).sort(新的ScoreSortBuilder().order(SortOrder.DESC));
searchRequest.source(searchSourceBuilder);
试一试{
SearchResponse SearchResponse=esclient.search(searchRequest,RequestOptions.DEFAULT);
SearchHit[]hits=searchResponse.getHits().getHits();
返回Arrays.stream(hits).map(hit->convert(hit.getSourceAsString(),Result.class)).collect(Collectors.toList());
}捕获(例外e){
e、 printStackTrace();
返回新的ArrayList();
}
}
公共静态T转换(字符串,类pojo){
ObjectMapper ObjectMapper=新的ObjectMapper();
objectMapper.configure(在未知属性上反序列化feature.FAIL,false);
试一试{
返回objectMapper.readValue(字符串,pojo);
}捕获(IOE异常){
抛出新的未选中异常(e);
}
}