背 景

  ElasticSearch常用的字符串类型有keywordtext,那keyword支持排序但是不支持分词,而text类型字段,ES默认分词且不会建立正排索引。即使设置"fielddata": true建立正排索引后,对该字段的排序依然有问题:ES不会以整个字段文本排序,而是选择分词后的一个字段进行排序。
  而有的需求,我不但要字段支持分词,也要该字段整体能排序,而不是分词后的字段排序,如设置的标签字段tag_key,我希望别人搜索标签的时候能支持分词,同时我也希望搜出来的标签是有序的;

实 现

  这种需求的做法,其实也不难,就是将tag_key字段建立两次索引,一个索引设置为text类型用于分词,一个索引设置为keyword类型用于排序,具体操作如下,需求完美解决!

PUT /book 
{
    
    "settings":  
    {
    
        "number_of_replicas": 3, 
        "number_of_shards": 1, 
        "max_result_window":1000000 
    }, 
    "mappings":  
    {
    
        "properties": 
        {
    
            "id":  
            {
    
                "type": "long" 
            }, 
            "tag_key":  
            {
    
                "type": "text", 
                "fields": 
                 {
    
                     "raw": 
                      {
    
                         "type": "keyword" 
                     } 
                 } 
            }, 
            "tag_rank": 
            {
    
                 "type": "integer" 
            }, 
            "tag_value":  
           {
    
              "type": "text" 
           } 
        } 
    } 
} 

同理实现一个字段既要text也要keyword

  如办公大楼的企业水牌,一个大楼可能包含很多企业入住,针对这些企业,我希望能在ElasticSearch时既能分词查询(需要该field的是text类型)又能支持全词模糊匹配(即wildcard查询,需要字段是keyword),那么在创建索引是根据上述原理一样安排即可;

PUT /building 
{
    
    "settings":  
    {
    
        "number_of_replicas": 3, 
        "number_of_shards": 1, 
        "max_result_window":1000000 
    }, 
    "mappings":  
    {
    
        "properties": 
        {
    
                "signboard_list": 
                {
    
                  "type": "text"  ,  
				  "analyzer": "ik_smart" , 
                  "fields":  
				  {
     
                      "keyword":  
					  {
     
                          "type": "keyword",  
                          "ignore_above": 256  
                      }  
                               
				  }  
                } 
         } 
     } 
} 

本文参考链接:https://blog.csdn.net/LXWalaz1s1s/article/details/110394937
评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!