美文网首页
Elasticsearch Java High-level-re

Elasticsearch Java High-level-re

作者: i_cyy | 来源:发表于2021-05-10 14:30 被阅读0次

先构建一个索引
PUT test_index { "mappings": { "properties": { "content": { "type": "text", "analyzer": "english" } } } }
加点数据
PUT test_index/_doc/doc1 { "content" : "For you I'm only a fox like a hundred thousand other foxes. But if you tame me, we'll need each other. You'll be the only boy in the world for me. I'll be the only fox in the world for you." }
高亮查询例子1:
GET test_index/_search { "query": { "match_phrase" : {"content" : "only fox"} }, "highlight": { "type" : "unified", "number_of_fragments" : 3, "fields": { "content": {} } } }

对应的java api实现:

public void testHighLightQuery(){

    //1.Create a search request
    SearchRequest searchRequest = new SearchRequest("test_index");

    //2.Use SearchSourceBuilder to construct the query request body
    SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();

    //Construct QueryBuilder
    QueryBuilder matchQueryBuilder =  QueryBuilders.matchQuery("content","only fox");
    sourceBuilder.query(matchQueryBuilder);

    //Page setting
    sourceBuilder.from(0);
    sourceBuilder.size(5);

    //Highlight setting
    HighlightBuilder highlightBuilder = new HighlightBuilder();
    highlightBuilder.requireFieldMatch(false).field("content").numOfFragments(3).highlighterType("unified");

    sourceBuilder.highlighter(highlightBuilder);
    searchRequest.source(sourceBuilder);

    try {
        //3.Send a request
        SearchResponse searchResponse = restClient.search(searchRequest, RequestOptions.DEFAULT);

        //4.Processing the response
        if(RestStatus.OK.equals(searchResponse.status())){
            SearchHits hits = searchResponse.getHits();
            long totalHits = hits.getTotalHits().value;
            SearchHit[] searchHits = hits.getHits();
            for(SearchHit hit : searchHits){
                String index = hit.getIndex();
                String id = hit.getId();
                float score = hit.getScore();

                //Take the _source filed value
                Map<String,Object> sourceAsMap = hit.getSourceAsMap();
                String content = (String) sourceAsMap.get("content");
                log.info("index:" + index + " id:"+id);
                log.info("content : " + content);

                //Take the highlight result
                Map<String, HighlightField> highlightFieldMap = hit.getHighlightFields();
                HighlightField highlightField = highlightFieldMap.get("content");
                if(highlightField != null){
                    Text[] fragments = highlightField.fragments();
                    if(fragments != null){
                        String fragmentStr = fragments[0].string();
                        log.info("content highlight : " + fragmentStr);
                    }
                }
            }

        }

    } catch (IOException e) {
        e.printStackTrace();
    }
}

高亮查询Demo2:
GET /_search { "query": { "match_phrase" : {"content" : "only fox"} }, "highlight":{ "pre_tags":[ "<tag1>" ,"<tag2>" ], "post_tags":[ "</ tag1>" ,"</ tag2>"], "fields":{ "content":{} } } }
Java api demo:
public void testHighLightQuery02(){

    //1.Create a search request
    SearchRequest searchRequest = new SearchRequest();

    //2.Use SearchSourceBuilder to construct the query request body
    SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();

    //Construct QueryBuilder
    QueryBuilder matchQueryBuilder =  QueryBuilders.matchPhraseQuery("content","only fox");
    sourceBuilder.query(matchQueryBuilder);

    //Highlight setting
    HighlightBuilder highlightBuilder = new HighlightBuilder();
    highlightBuilder.requireFieldMatch(false)
            .preTags("<tag1>","<tag2>")
            .postTags("</ tag1>","</ tag2>")
            .field("content");

    sourceBuilder.highlighter(highlightBuilder);
    searchRequest.source(sourceBuilder);

    try {
        //3.Send a request
        SearchResponse searchResponse = restClient.search(searchRequest, RequestOptions.DEFAULT);

        //4.Processing the response
        if(RestStatus.OK.equals(searchResponse.status())){
            SearchHits hits = searchResponse.getHits();
            long totalHits = hits.getTotalHits().value;
            SearchHit[] searchHits = hits.getHits();
            for(SearchHit hit : searchHits){
                String index = hit.getIndex();
                String id = hit.getId();
                float score = hit.getScore();

                //Take the _source filed value
                Map<String,Object> sourceAsMap = hit.getSourceAsMap();
                String content = (String) sourceAsMap.get("content");
                log.info("index:" + index + " id:"+id);
                log.info("content : " + content);

                //Take the highlight result
                Map<String, HighlightField> highlightFieldMap = hit.getHighlightFields();
                HighlightField highlightField = highlightFieldMap.get("content");
                if(highlightField != null){
                    Text[] fragments = highlightField.fragments();
                    if(fragments != null){
                        String fragmentStr = fragments[0].string();
                        log.info("content highlight : " + fragmentStr);
                    }
                }
            }

        }

    } catch (IOException e) {
        e.printStackTrace();
    }
}

相关文章

网友评论

      本文标题:Elasticsearch Java High-level-re

      本文链接:https://www.haomeiwen.com/subject/idlidltx.html