Pom file
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.10</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.68</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
<version>${elasticsearch.version}</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>${elasticsearch.version}</version>
</dependency>
</dependencies>
Controller
public class TestController {
@Autowired
EsClient esClient;
@PostMapping
public String commit(@RequestBody JSONObject jsonObject) {
log.info(jsonObject.toJSONString());
esClient.saveIndex("chinese", jsonObject.toJSONString());
return "ok";
}
@GetMapping
public String query(HttpServletRequest request, @RequestParam(name = "key") String key) {
return esClient.query(key);
}
}
EsClient class
@Component
@Slf4j
public class EsClient {
private static final String INDEX_TYPE = "doc";
private static final String HOST = "192.168.0.71";
private RestClient lowClient;
private RestHighLevelClient highClient;
public EsClient() {
lowClient = RestClient
.builder(new HttpHost(HOST, 9200, "http"))
.build();
highClient = new RestHighLevelClient(RestClient.builder(
new HttpHost(HOST, 9200, "http")));
}
public String saveIndex(String indexName, String jsonData) {
try {
IndexRequest request = new IndexRequest(indexName, INDEX_TYPE);
request.source(jsonData, XContentType.JSON);
IndexResponse indexResponse = highClient.index(request, RequestOptions.DEFAULT);
log.info(String.format("存储es------>indexName:%s,status:%s,thread:%s", indexName, indexResponse.status(), Thread.currentThread()));
return indexResponse.status().toString();
} catch (IOException e) {
e.printStackTrace();
}
return "";
}
private QueryBuilder buildQueryBuilder(String keyword) {
QueryBuilder totalBuilder;
String[] andStr = keyword.split(",");
String[] orStr = keyword.split(";");
if (andStr.length > 1) {
QueryStringQueryBuilder queryStringQueryBuilder;
totalBuilder = QueryBuilders.boolQuery();
for (String s : andStr) {
queryStringQueryBuilder = QueryBuilders.queryStringQuery(s).defaultOperator(Operator.AND);
((BoolQueryBuilder) totalBuilder).filter(queryStringQueryBuilder);
}
} else if (orStr.length > 1) {
QueryStringQueryBuilder queryStringQueryBuilder;
totalBuilder = QueryBuilders.boolQuery();
for (String s : orStr) {
queryStringQueryBuilder = QueryBuilders.queryStringQuery(s).defaultOperator(Operator.AND);
((BoolQueryBuilder) totalBuilder).should(queryStringQueryBuilder);
}
} else {
totalBuilder = QueryBuilders.queryStringQuery(keyword).defaultOperator(Operator.AND);
}
return totalBuilder;
}
public String querySql(String sql) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("query", "select * from chinese where a=987");
HttpEntity httpEntity = new NStringEntity(jsonObject.toJSONString(), ContentType.APPLICATION_JSON);
Request request = new Request("POST", "/_xpack/sql?format=txt");
request.setEntity(httpEntity);
try {
Response response = lowClient.performRequest(request);
String str = getInputStream(response.getEntity().getContent());
return str;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
String getInputStream(InputStream inputStream) {
BufferedInputStream bis = new BufferedInputStream(inputStream);
ByteArrayOutputStream buf = new ByteArrayOutputStream();
int result;
try {
result = bis.read();
while (result != -1) {
buf.write((byte) result);
result = bis.read();
}
} catch (IOException e) {
e.printStackTrace();
}
return buf.toString();
}
}
QueryBuilders description
Global fuzzy matching, the default is OR, which will split the characters into individual matches, such as "Hello", will search out all documents containing "你" and "好". Change
the default to AND, and only search for "Hello" "
QueryBuilders.queryStringQuery(s).defaultOperator(Operator.AND);
#这样默认是查询包含“你” 或者 “好” 的所有文档
GET index/doc/_search
{
"query": {
"query_string": {
"query": "你好"
}
}
}
1. Match multiple strings "AND" at the same time
QueryStringQueryBuilder queryStringQueryBuilder;
totalBuilder = QueryBuilders.boolQuery();
for (String s : andStr) {
queryStringQueryBuilder = QueryBuilders.queryStringQuery(s).defaultOperator(Operator.AND);
((BoolQueryBuilder) totalBuilder).must(queryStringQueryBuilder);
}
Equivalent to CURL
#查询 同时包含 "你好" 和 "大家好"文档
GET index/doc/_search
{
"query": {
"bool": {
"must": [
{
"query_string": {
"query": "你好",
"default_operator": "AND"
}
},
{
"query_string": {
"query": "大家好",
"default_operator": "AND"
}
}
]
}
}
}
2. Match multiple strings "OR"
QueryStringQueryBuilder queryStringQueryBuilder;
totalBuilder = QueryBuilders.boolQuery();
for (String s : orStr) {
queryStringQueryBuilder = QueryBuilders.queryStringQuery(s).defaultOperator(Operator.AND);
((BoolQueryBuilder) totalBuilder).should(queryStringQueryBuilder);
}
Equivalent to CURL
#查询 包含 "你好" 或者 "大家好" 文档
GET index/doc/_search
{
"query": {
"bool": {
"should": [
{
"query_string": {
"query": "你好",
"default_operator": "AND"
}
},
{
"query_string": {
"query": "大家好",
"default_operator": "AND"
}
}
]
}
}
}
note
Pure numbers, pure English is without word segmentation by default, it is useless to find some letters in English words.