ETJava Beta | Java    注册   登录
  • elasticsearch 多条件查询 - filter过滤

    发表于 2024-04-09 22:15:51     阅读(187)     博客类别:Elasticsearch

    elasticsearch 多条件查询 - filter过滤

    过滤查询
    例如
    	票价必须少于40

    方式1 restful api

    filter表示过滤
    	range 表示范围查询
    		let 表示小于
    		get 大于
    		
    POST  http://192.168.199.126:9200/film/dongzuo/_search/
    {
      "query": {
        "bool": {
          "must": {
            "match": {
              "title": "战"
            }
          },
          "filter": {
            "range": {
              "price": {
                "lte": "40"
              }
            }
          }
        }
      }
    }

    方式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();
            }
        }
     
    
    /**
         * 多条件查询 filter过滤
         * 例如 过滤票价低于40
         * @throws Exception
         */
    @Test
    public void searchMutil4()throws Exception{
        SearchRequestBuilder srb=client.prepareSearch("film").setTypes("dongzuo");
        QueryBuilder queryBuilder=QueryBuilders.matchPhraseQuery("title", "战");
        QueryBuilder queryBuilder2=QueryBuilders.rangeQuery("price").lte(40);// lte小于 gte大于
        SearchResponse sr=srb.setQuery(QueryBuilders.boolQuery()
                                       .must(queryBuilder)
                                       .filter(queryBuilder2))
            .execute()
            .actionGet();
        SearchHits hits=sr.getHits();
        for(SearchHit hit:hits){
            System.out.println(hit.getSourceAsString());
        }
    }