http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 4736|回复: 3

[搜索引擎] 34-Elasticsearch 字符串排序与多字段

[复制链接]
发表于 2019-1-3 09:52:17 | 显示全部楼层 |阅读模式
字符串排序与多字段

     被解析的字符串字段也是多值字段, 但是很少会按照你想要的方式进行排序。如果你想分析一个字符串,如 fine old art , 这包含 3 项。我们很可能想要按第一项的字母排序,然后按第二项的字母排序,诸如此类,但是 Elasticsearch 在排序过程中没有这样的信息。

你可以使用 min 和 max 排序模式(默认是 min ),但是这会导致排序以 art 或是 old ,任何一个都不是所希望的。

为了以字符串字段进行排序,这个字段应仅包含一项: 整个 not_analyzed 字符串。 但是我们仍需要 analyzed 字段,这样才能以全文进行查询

一个简单的方法是用两种方式对同一个字符串进行索引,这将在文档中包括两个字段: analyzed 用于搜索, not_analyzed 用于排序

但是保存相同的字符串两次在 _source 字段是浪费空间的。 我们真正想要做的是传递一个 单字段 但是却用两种方式索引它。所有的 _core_field 类型 (strings, numbers, Booleans, dates) 接收一个 fields 参数

该参数允许你转化一个简单的映射如:

[C#] 纯文本查看 复制代码
"tweet": {

    "type":     "string",

    "analyzer": "english"

}

为一个多字段映射如:
[C#] 纯文本查看 复制代码
"tweet": { 

    "type":     "string",

    "analyzer": "english",

    "fields": {

        "raw": { 

            "type":  "string",

            "index": "not_analyzed"

        }

    }

}

拷贝为 CURL在 SENSE 中查看


tweet 主字段与之前的一样: 是一个 analyzed 全文字段。



新的 tweet.raw 子字段是 not_analyzed.

现在,至少只要我们重新索引了我们的数据,使用 tweet 字段用于搜索,tweet.raw 字段用于排序:

[C#] 纯文本查看 复制代码
GET /_search

{

    "query": {

        "match": {

            "tweet": "elasticsearch"

        }

    },

    "sort": "tweet.raw"

}

拷贝为 CURL在 SENSE 中查看
警告
以全文 analyzed 字段排序会消耗大量的内存。获取更多信息请看 聚合与分析 。



1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2019-1-3 11:39:15 | 显示全部楼层
我只是路过打酱油的。
发表于 2019-1-3 15:58:09 | 显示全部楼层
感恩无私的分享与奉献
发表于 2019-1-3 17:10:46 | 显示全部楼层
我只是路过打酱油的。
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-11-8 13:44

© 2014-2021

快速回复 返回顶部 返回列表