帮我用java 写一个 es 根据 发票日期,发票类型多选 查询的代码
时间: 2024-02-01 14:16:31 浏览: 149
假设你已经安装好了 Elasticsearch 的 Java API,下面是一个示例代码:
```java
import java.net.InetAddress;
import java.util.ArrayList;
import java.util.List;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
public class ESQueryDemo {
public static void main(String[] args) throws Exception {
// 连接 Elasticsearch
Client client = TransportClient.builder().build()
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300));
// 构建查询条件
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery()
.filter(QueryBuilders.termsQuery("type", "type1", "type2")) // 发票类型多选
.filter(QueryBuilders.rangeQuery("date").gte("2021-01-01").lte("2021-12-31")); // 发票日期范围
// 构建查询请求
SearchRequestBuilder requestBuilder = client.prepareSearch("invoices")
.setTypes("invoice")
.setQuery(queryBuilder)
.setSize(10); // 查询结果最多返回 10 条记录
// 执行查询
SearchResponse response = requestBuilder.execute().actionGet();
// 处理查询结果
List<String> results = new ArrayList<>();
for (SearchHit hit : response.getHits().getHits()) {
results.add(hit.getSourceAsString());
}
System.out.println(results);
// 关闭连接
client.close();
}
}
```
其中:
- `localhost` 和 `9300` 分别是 Elasticsearch 的 IP 地址和端口号,需要根据你自己的 Elasticsearch 进行修改;
- `invoices` 和 `invoice` 分别是索引名和类型名,需要根据你自己的数据进行修改;
- `type1` 和 `type2` 是发票类型的值,可以根据实际情况进行修改;
- `"2021-01-01"` 和 `"2021-12-31"` 是发票日期的范围,可以根据实际情况进行修改;
- `setSize(10)` 表示查询结果最多返回 10 条记录,可以根据实际情况进行修改。
当然,这只是一个示例代码,实际使用时需要根据具体的需求进行修改和扩展。
阅读全文