ElasticSearch实现字符串既要分词查询又要字段整体排序(一个字段既要text也要keyword)

背 景

  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 
                      } 
                              
				  } 
                }
         }
     }
}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

╭⌒若隐_RowYet——大数据

谢谢小哥哥,小姐姐的巨款

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值