ETJava Beta | Java    注册   登录
  • elasticsearch 查询 - 查询条件高亮显示

    发表于 2024-04-09 21:59:50     阅读(207)     博客类别:Elasticsearch

    elasticsearch 查询 - 查询条件高亮显示

    方式1 restful api

    POST   http://192.168.199.126:9200/film/dongzuo/_search/
    {
      "query": {
        "match": {
          "title": "星球"
        }
      },
      "_source": {
        "include": [
          "title",
          "price"
        ]
      },
      "highlight": {
        "fields": {
          "title": {}
        }
      }
    }

    方式2 Java接口实现

    部分代码
    private TransportClient client;
    
        private static String host="192.168.199.126";
        private static int port=9300; // 程序连接的端口
    
        // 配置settings 集群相关
        private static Settings.Builder settings = Settings.builder().put("cluster.name","my-application");
    
    
        @Before
        public void init() throws UnknownHostException {
            client = new PreBuiltTransportClient(settings.build())
                    .addTransportAddress(new TransportAddress(InetAddress.getByName(host), port));
    
        }
    
        @After
        public void close(){
            if(client!=null){
                client.close();
            }
        }
    
    
    
    /**
         * 条件查询高亮实现
         * @throws Exception
         */
    @Test
    public void searchHighlight()throws Exception{
        SearchRequestBuilder srb=client.prepareSearch("film").setTypes("dongzuo");
        HighlightBuilder highlightBuilder=new HighlightBuilder();
        highlightBuilder.preTags("<h2>");// 关键字之前添加
        highlightBuilder.postTags("</h2>");// 关键字之后添加
        highlightBuilder.field("title"); // 设置要添加格式的字段
        SearchResponse sr=srb.setQuery(QueryBuilders.matchQuery("title", "星球"))
            .highlighter(highlightBuilder)// 设置关键字显示格式
            .setFetchSource(new String[]{"title","price"}, null)
            .execute()
            .actionGet(); 
        SearchHits hits=sr.getHits();
        for(SearchHit hit:hits){
            System.out.println(hit.getSourceAsString());
            System.out.println(hit.getHighlightFields());// 获取带有设置了格式的数据
        }
    }