前提:项目采用spring-data-elasticsearch 3.2.0
一、QueryBuilder 使用记录
(1)fuzzyQuery
功能:模糊匹配
原理: fuzzy搜索技术,搜索的时候,可能输入的搜索文本会出现误拼写的情况自动将拼写错误的搜索文本,进行纠正,纠正以后去尝试匹配索引中的数据纠正在一定的范围内如果差别大无法搜索出来
Java:
xxxRepository.search(QueryBuilders.fuzzyQuery("name", "张三"))
ES写法:
GET /my_index/my_type/_search
{
"query": {
"fuzzy": {
"text": {
"value": "surprize",
"fuzziness": 2 // fuzziness 即为最多纠正两个字母然后去匹配,默认为 auto(2)
}
}
}
}
(2)matchQuery
功能:根据分词进行匹配
Java:
MatchQueryBuilder matchQuery = QueryBuilders.matchQuery("name", archiveListFilterDTO.getPersonName());
xxxRepository.search(matchQuery);
ES写法:
GET my_index/my_type/_search
{
"query": {
"match": {
"xxx": "Quick Foxes!"
}
}
}
(3)termQuery
功能:精确查询 完全匹配
Java:
TermQueryBuilder termQuery = QueryBuilders.termQuery("cid",archiveListFilterDTO.getPersonCid());
xxxRepository.search(termQuery);
ES写法:
GET my_index/_search
{
"query": {
"term" : {
"cid" : {
"value" : "5137376667422s31000000"
}
}
}
}
(4)rangeQuery
功能:范围查询
Java:
RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("dt")
.gte(dateFormat.parse(snapMapDTO.getStartTime()).getTime())
.lte(dateFormat.parse(snapMapDTO.getEndTime()).getTime());
xxxRepository.search(rangeQueryBuilder);
ES写法:
GET my_index/_search
{
"query": {
"range" : {
"personFileCreateTime" : {
"from" : 1572331788000,
"to" : 1572331789000,
"include_lower" : true,
"include_upper" : true
}
}
}
}