queryString查询
- 会对查询条件进行分词
- 然后将分词后的查询条件和词条进行等值匹配
- 默认取并集(or)
- 可以指定多个查询字段
GET goods/_search
{
"query": {
"query_string": {
"fields": ["字段1","字段2"...],
"query": "查询条件1 or 查询条件2"
}
}
}
- 如果查询字段中有三个字段,而query只有「华为手机」,那么会先自动将「华为手机」分为两个词:华为、手机。然后先在三个字段中分别查找「华为」,再在三个字段中分别查找「手机」,最后范围并集。
- 如果是 “simple_query_string”,则在"query"中不支持 and 和 or 这种连接词。
@Test
public void testQueryStringQuery() throws IOException {
SearchRequest searchRequest = new SearchRequest("goods");
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
QueryBuilder queryStringQuery = QueryBuilders.queryStringQuery("title1").field("title").field("brandName").defaultOperator(Operator.OR);
sourceBuilder.query(queryStringQuery);
searchRequest.source(sourceBuilder);
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
SearchHits searchHits = searchResponse.getHits();
long value = searchHits.getTotalHits().value;
System.out.println("总记录数:" + value);
SearchHit[] hits = searchHits.getHits();
List<Goods> goodsList = new ArrayList<>();
for (SearchHit hit : hits) {
String sourceAsString = hit.getSourceAsString();
Goods goods = JSON.parseObject(sourceAsString, Goods.class);
goodsList.add(goods);
}
goodsList.forEach(c -> System.out.println(JSON.toJSONString(c)));
}