• elastisearch开发时的发现


    1. term,match,query_string

    • term:用作keyword类型字段精准查询,对text类型字段他也能模糊查询到
    • match:用作text类型字段模糊查询
    • query_string:lucence底层的模糊查询方法
      下面是go-elasticsearch/v8的用法,需要看dsl的自行转换
    // searchClassId long类型,term精准查询
    func (s *Student_score_idx) searchClassId(cond *entity.SearchCond) *types.Query {
    	if cond.ClassId == 0 {
    		return nil
    	}
    	query := types.Query{
    		Term: map[string]types.TermQuery{
    			"class_info.class_id": {
    				Value: cond.ClassId,
    			},
    		},
    	}
    	return &query
    }
    
    // searchClassName text类型,match可分词模糊查询
    func (s *Student_score_idx) searchClassName(cond *entity.SearchCond) *types.Query {
    	if cond.ClassName == "" {
    		return nil
    	}
    	query := types.Query{
    		Match: map[string]types.MatchQuery{
    			"class_info.class_name": {
    				Query: cond.ClassName,
    			},
    		},
    	}
    	return &query
    }
    
    // searchUsername wildcard类型(是keywords的一种),可分词模糊查询,这里用了query_string查询方法,是match查询的高级使用
    func (s *Student_score_idx) searchUsername(cond *entity.SearchCond) *types.Query {
    	if cond.Username == "" {
    		return nil
    	}
    	query := types.Query{
    		QueryString: &types.QueryStringQuery{
    			Query: fmt.Sprintf("*%s*", cond.Username),
    		},
    	}
    	return &query
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    字段的子类型

    业务某些字段,既精准查询也需要模糊查询就需要到子类型。
    下面是某个index的mapping,subject_info.subject_name是一个text类型字段,并且给他定义了一个子字段sub_name并将它设置成keyword类型(一般子字段名都用类型string为名,此例子应该协程keyword,我这样写是为了好区分关键字)。

    "subject_info": {
       "type": "object",
       "properties": {
         "subject_name": {
           "type": "text",
           "fields": {
             "sub_name"{
               "type": "keyword"
             }
           }
         } 
       }
     }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    使用方法就是

    GET INDEXNAME/_search
    {
      "query": {
        "term": {
          "subject_info.subject_name.sub_name": "精准查询"
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  • 相关阅读:
    vscode:连接服务器进行远程开发调试
    【无标题】
    用PHP搞掂黑群晖IPv6的DNSPod解析
    猿创征文丨赶紧进来看看!!!你可能都不清楚的三种变量和零值比较
    Qt的信号与槽的使用
    LRU缓存
    8月HCIP新版Datacom考试通过率100%
    IDEA—java: 常量字符串过长问题解决
    JSP page对象简介说明
    H5\CSS\JS 盒子拖动mousedown、mousemove、mouseup、pageX、pageY、offsetLeft、offsetTop
  • 原文地址:https://blog.csdn.net/qiu18610714529/article/details/133777295