ElasticSearch之排序使用-ES常用排序方法
来源:互联网 发布:安卓汉化软件 编辑:程序博客网 时间:2024/05/16 13:44
在搜索系统中,最常遇到的一个需求就是排序,同时排序也是搜索引擎需要改造最多的地方。
(1)按照相似度匹配得分排序
(2)按照指定字段排序
相似度得分排序是系统默认的排序方式,更多时候,我们需要按照指定字段排序。lucene中,基于字段内容的排序是由FieldComparator接口来实现的,在排序中又分为单字段排序和多字段排序。在排序速度方面,数值类型排序速度最快,在lucene中数值类型的排序是由 NumericComparator 的派生类来实现,NumericComparator派生类支持 float、double、int 、long 四钟类型(日期在底层会转化为long型存储)。字符串类型的字段一般都需要进行搜索的,那么需要对其进行分词处理。分词处理的结果就是将该字符串解析为多个词条。在lucene层面,根据docid可以取到多个索引词条,而无论采用哪个索引词条来进行排序其实都正确。
所以为了对字符串类型字段进行排序,需要保存整个字符串作为一个索引词条,同时为了保证该字段能够被搜索,还要保存该字符串analyzed的结果(即需要保存完整的字符串作为一个词条,同时又分词索引)。
在ES中为实现该功能,ES提供了 multi-field mapping 机制,配置通过配置即可实现字段即分词,又可排序:
"title": {
"type": "string",
"analyzer": "ansj",
"fields": {
"sort": {
"type": "string",
"index": "not_analyzed"
}
}
}
通过title字段作为搜索,而用title.sort字段作为排序:
GET /_search
{
"query": {
"match": {
"title": "elasticsearch"
}
},
"sort": "title.sort"
}
{
"from": 0,
"size": 10,
"query": {
"query_string": { "query": "*:*", "default_operator": "and" }
},
"sort": [
{
"title.sort": { "order": "desc" },
"_score": { "order": "desc" }}
]
}
缺省字段排序:
{
"from": 0,
"size": 10,
"query": {
"query_string": { "query": "title:test", "default_operator": "and" }
},
"sort": [
{
"rpgendatetime": { "order": "desc", "missing": "_last" }
}
]
}
使用脚本排序:
{ "query" : { "query_string": { "query": "", "default_operator": "and" } }, "sort" : { "_script" : { "type" : "number", "script" : { "inline": "doc['field_name'].value * factor", "params" : { "factor" : 1.1 } }, "order" : "asc" } }}
阅读全文
0 0
- ElasticSearch之排序使用-ES常用排序方法
- elasticsearch系列之排序
- Elasticsearch之排序。
- elasticsearch排序
- Elasticsearch-排序
- java中常用的排序方法之-----快速排序
- 常用排序之冒泡排序
- 常用的排序方法
- 常用排序方法(C#)
- 常用排序方法实现
- Oracle 常用 排序方法
- 排序方法,常用
- 常用排序方法
- 常用排序方法介绍
- 常用排序方法
- 常用排序方法代码
- 常用排序方法
- 排序方法之堆排序
- 数据结构/实现二叉树的前序/中序/后序非递归遍历
- 收藏版:java常见面试题目精讲视频教程
- base64编码的图片在HTML的img控件中显示
- java多线程基础知识
- 1081. Rational Sum (20)
- ElasticSearch之排序使用-ES常用排序方法
- G
- POJ2393 Yogurt factory (贪心 | dp)
- 第九章:用户自己建立数据类型(结构体)
- 记一次,编译MuseScore的经历
- 使用OpenFiler来模拟存储配置RAC中ASM共享盘及多路径(multipath)的测试
- POJ1067--取石子游戏(威佐夫博弈)
- 笔记:回调的实现
- 常用的分布式事务解决方案介绍