ElasticSearch 排序】的更多相关文章

1.相关性排序 ElasticSearch为了按照相关性来排序,需要将相关性表示为一个数值,在 Elasticsearch 中, 相关性得分 由一个浮点数进行表示,并在搜索结果中通过 _score 参数返回, 默认排序是 _score 降序. GET /index_china/fulltext/_search { "query": { "match": { "name": "小张" } } } 2.按照字段排序 有时,按照相关…
直接观察到的几个问题 简单expression脚本的执行效率 > java 插件,10000条数据可以测试出1ms左右的差距. Es会不断调用newScript来创建"足够多"的自定义脚本对象,来处理,不管数据量多还是少,应该有个初始值.所以本地有时候只有几条测试数据,它也会创建几十个自定义脚本对象,并不奇怪,这个我纠结了比较久,以为是代码有问题. 数值类型问题 官方有个demo,那个在java8 + es2.0 跑不起来的,主要问题就是这个数值类型. 从source().get…
我们之前查询出的结果都会有一个_score分值表示列出结果与搜索结果的相关性,该值越高排序位置越靠前,es具体是如何计算该值的,我们认真来看看. 1.根据字段值排序 比如我们要查询/index5下subject.subject-name匹配关键字"computer"的内容,并且根据subject.id字段做倒序排序 其实这个查询相当于关系型数据库查询:select * from index5 where subject.subject-name like '%computer%' or…
代码: String time1 = ConstValue.GetCurrentDate(); SortBuilder sortBuilder = SortBuilders.fieldSort("tfp_save_time") .order(SortOrder.DESC).ignoreUnmapped(true); SearchResponse scrollResp = client .prepareSearch("flume-" + time1 + "-…
Elasticsearch 的基本信息大致如图所示,这里就不具体介绍了. 本次分享主要包含两个方面的实战经验:索引性能和查询性能. 一. 索引性能(Index Performance) 首先要考虑的是,索引性能是否有必要做优化? 索引速度提高与否?主要是看瓶颈在什么地方,若是 Read DB(产生DOC)的速度比较慢,那瓶颈不在 ElasticSearch 时,优化就没那么大的动力.实际上 Elasticsearch 的索引速度还是非常快的. 我们有一次遇到 Elasticsearch 升级后索…
这里是用来管理您的 kibana 运行时配置的地方,包括初始化配置和后续的索引模式配置.高级设置等.您可以调整 kibana 自身的行为,也可以编辑您通过 kibana 保存的查询.视图.仪表板等各种 "对象" . 这部分功能是通过插件实现的,所以除了开箱即用的功能外,诸如 X-Pack 之类的扩展也可以为 Kibana 增加额外的管理能力. 索引模式 索引模式 要使用Kibana,您需要通过配置一个或多个索引模式来告诉它您想探索的 Elasticsearch 索引.您也可以: 通过对…
引用自ElaticSearch权威指南 一.排序 相关性排序 默认情况下,结果集会按照相关性进行排序 -- 相关性越高,排名越靠前. 这一章我们会讲述相关性是什么以及它是如何计算的. 在此之前,我们先看一下sort参数的使用方法. 排序方式 为了使结果可以按照相关性进行排序,我们需要一个相关性的值.在ElasticSearch的查询结果中, 相关性分值会用_score字段来给出一个浮点型的数值,所以默认情况下,结果集以_score进行倒序排列. 有时,即便如此,你还是没有一个有意义的相关性分值.…
一.先摆需求: 1.中文搜索.英文搜索.中英混搜   如:"南京东路","cafe 南京东路店" 2.全拼搜索.首字母搜索.中文+全拼.中文+首字母混搜   如:"nanjingdonglu","njdl","南京donglu","南京dl","nang南东路","njd路"等等组合 3.简繁搜索.特殊符号过滤搜索   如:"龍馬&quo…
ES添加排序 在默认的情况下,ES 是根据文档的得分score来进行文档额排序的.但是自己可以根据自己的针对一些字段进行排序.就像下面的查询脚本一样.下面的这个查询是根据productid这个值进行排序的,而且进行了双字段的排序.当productid 相同时的文档是根据下面的那个排序字段进行的排序 POST /product/_search { "query": { "bool": { "filter": { "term":…
背景 通过脚本改变评分 背景 近期有一个需求,需要对优惠券可用商品列表加个排序,只针对面值类的券不包括折扣券. 需求是这样的,假设有一张面值券 50 块钱,可用商品列表 A 100.B 40.C 10,当用户查询当前券可用商品列表的时候优先将卡券可以直接抵扣且不需要用户在额外支付的商品排在前面. C 10 B 40 A 100 其实排序有很多侧重,比如: 1.根据用户利益最大化原则,排序列表应该是 B.C.A 2.根据用户购买习惯,有可能是 A.B.C 3.根据运营策略.第三方利益等有可能是C.…
在使用 Elasticsearch 进行全文搜索时,搜索结果默认会以文档的相关度进行排序,如果想要改变默认的排序规则,也可以通过sort指定一个或多个排序字段. 但是使用sort排序过于绝对,它会直接忽略掉文档本身的相关度(根本不会去计算).在很多时候这样做的效果并不好,这时候就需要对多个字段进行综合评估,得出一个最终的排序. function\_score在 Elasticsearch 中function_score是用于处理文档分值的 DSL,它会在查询结束后对每一个匹配的文档进行一系列的重…
排序方式 相关性排序 默认情况下,结果集会按照相关性进行排序 -- 相关性越高,排名越靠前. 相关性分值会用_score字段来给出一个浮点型的数值,所以默认情况下,结果集以_score进行倒序排列. 字段值排序 使用 sort 参数进行排序: GET /_search { "query" : { "filtered" : { "filter" : { "term" : { "user_id" : 1 }}…
使用 https://github.com/taowen/es-monitor 可以用 SQL 进行 elasticsearch 的查询.有的时候分桶聚合之后会产生很多的桶,我们只对其中部分的桶关心.最简单的办法就是排序之后然后取前几位的结果. ORDER BY _term SQL $ cat EOF {", "ipo_year": } {", "ipo_year": } Elasticsearch { "aggs": { &…
ElasticSearch 2 (34) - 信息聚合系列之多值排序 摘要 多值桶(terms.histogram 和 date_histogram)动态生成很多桶,Elasticsearch 是如何决定这些桶展示给用户的顺序呢? 默认的,桶会根据 doc_count 降序排列,这是一个好的默认行为,因为通常我们想要找到文档中与查询条件相关的最大值:售价.人口数量.频率.但有些时候我们希望能修改这个顺序,不同的桶有着不同的处理方式. 版本 elasticsearch版本: elasticsear…
插件入口: package ttd.ugc.plugin; import org.elasticsearch.plugins.Plugin;import org.elasticsearch.script.ScriptModule; /** * Created by jin_h on 2017/1/9. */public class NativeScriptPlugin extends Plugin { @Override public String name() { return "commen…
介绍 我们为什么要用搜索引擎?我们的所有数据在数据库里面都有,而且 Oracle.SQL Server 等数据库里也能提供查询检索或者聚类分析功能,直接通过数据库查询不就可以了吗?确实,我们大部分的查询功能都可以通过数据库查询获得,如果查询效率低下,还可以通过建数据库索引,优化SQL等方式进行提升效率,甚至通过引入缓存来加快数据的返回速度.如果数据量更大,就可以分库分表来分担查询压力. 那为什么还要全文搜索引擎呢?我们主要从以下几个原因分析: 数据类型全文索引搜索支持非结构化数据的搜索,可以更好…
elasticsearch 支持强大的经纬度坐标过滤. 1.首先要建立坐标类型的字段'type' ='geo_point' es存储的值是这样的: "poi": [          113.40780444444,          22.920241666667      ], 2.构建各种经纬度过滤条件 a.获取屏幕范围内,只需屏幕的两个对角的坐标. {        "from": 0,        "size": 20,       …
springboot整合es的方式: transport方式(7.0弃用,8.0移除) spring-data(完全当做数据库来用,无法全部支持es,内部也是基于transport,包装后使用非常简单,和JPA基本类似) rest(low-level和high-level,low-level非常完善,支持所有版本,需要自己组装request和解析response,high-level是对low-level的包装,必须跟着大版本走) 根据官方的建议,我们一般采用high-level的方式来对ES操…
ElasticSearch源码解析(五):排序(评分公式) 转载自:http://blog.csdn.net/molong1208/article/details/50623948   一.目的 一个搜索引擎使用的时候必定需要排序这个模块,一般情况下在不选择按照某一字段排序的情况下,都是按照打分的高低进行一个默认排序的,所以如果正式使用的话,必须对默认排序的打分策略有一个详细的了解才可以,否则被问起来为什么这个在前面,那个在后面不好办,因此对Elasticsearch的打分策略详细的看了下,虽然…
目录 上节回顾 本节前言 文档的搜索 URL参数条件搜索 请求体条件搜索 语法与示例: 补充: 小节总结: 文档的过滤filter 语法与举例: filter与bool constant_score cache 小节总结: 文档的聚合分析 准备数据 语法与举例: 其他语法: 补充: 小节总结: 文档的分页.排序 分页 排序 deep paging 补充: 小节总结: 发表日期:2019年9月20日 上节回顾 1.讲了如何对索引CRUD 2.重新解释了type,只是元数据的效果 3.讲了如何对文档…
做过elk的人应该了解kibana排序至支持到秒级别,但同一秒内出现多个日志的时候那么kibana展示的日志就会混轮,加上该代理可以解决该问题 # 拉取elasticproxy镜像 [root@localhost ELK-filebeat]# docker pull zhangyuming/elasticproxy Using default tag: latest latest: Pulling from zhangyuming/elasticproxy cd784148e348: Pull…
一.请求体查询 请求体 search API, 之所以称之为请求体查询(Full-Body Search),因为大部分参数是通过http请求体而非查询字符串来传递的. 请求体查询:不仅可以处理自身的查询请求,还允许你对结果进行片段强调(高亮).对所有或部分结果进行聚合分析,同时还可以给出 你是不是想找 的建议,这些建议可以引导使用者快速找到他想要的结果. 某些特定语言(特别是 JavaScript)的 HTTP 库是不允许 GET 请求带有请求体的,可以用POST代替. 1.空查询 空查询,空的…
背景说明 最近在做一个 Elasticsearch 的分页查询,并且对查询结果按照特定字段进行排序的功能. 但是执行结果却报错,报错信息如下: { "error": { "root_cause": [ { "type": "illegal_argument_exception", "reason": "Fielddata is disabled on text fields by default.…
默认情况下,ElasticSearch 会根据算分进行排序: 可以使用 sort API 指定排序的规则: POST /kibana_sample_data_ecommerce/_search { "size": , "query": { "match_all": { } }, "sort": [ {"order_date": {"order": "desc"}} ]…
    前面大概了解了一下elasticsearch的数据存储和数据的查询.现在学习一下,es的复杂操作.     官网相关文档地址:https://www.elastic.co/guide/en/elasticsearch/client/java-api/7.x/java-docs-delete-by-query.html     spring boot提供的Elasticsearch 的Data查询:https://docs.spring.io/spring-data/elasticsear…
//为index创建mapping,index相当于mysql的数据库,数据库里的表也要给各个字段创建类型,所以index也要给字段事先设置好类型: 使用postMan或者其他工具创建:(此处我使用postMan,创建一个名为shop的index,type是order-- type相等于mysql的表) //这里的背景是一个订单表对应多个订单项表(商品信息),然后就将所有的订单和购买的商品信息存到ES,我这里的ES版本是6.4.2 //以下介绍的mapping字段分词器都是英文的,如果要使用中文…
使用function_score进行分组处理,利用分组函数script_score进行自定义分值处理, 注意:使用script功能需要在配置中打开脚本功能: script.inline: on   script.indexed: on  script.engine.groovy.inline.aggs: on   script.file: on 下图中的查询表示,查询termid为1238218的记录,或者displayname包含“宝宝”的记录: termid为1238218的记录排序分人为设…
有用的链接:http://stackoverflow.com/questions/12215380/sorting-on-several-fields-in-elasticsearch 有的时候,需要自己设定排序,java的一个接口如下: String time1 = ConstValue.GetCurrentDate(); SortBuilder sortBuilder = SortBuilders.fieldSort("tfp_save_time") .order(SortOrde…
searchRequestBuilder.addSort("publish_time", SortOrder.DESC); 按照某个字段排序的话,hit.getScore()将会失效…
function_score Query The function_score query is the ultimate tool for taking control of the scoring process. It allows you to apply a function to each document that matches the main query in order to alter or completely replace the original query _s…