首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
es为什么搜索的数据每次都不一致
2024-10-04
Elasticsearch搜索结果返回不一致问题
一.背景 这周在使用Elasticsearch搜索的时候遇到一个,对于同一个搜索请求,会出现top50返回结果和排序不一致的问题.那么为什么会出现这样的问题? 后来通过百度和google,发现这是因为Elastcisearch的分布式搜索特性导致.Elasticsearch在搜索时,会循环的选择主分片和其副本中的一个来计算和返回搜索结果,而由于主分片和副本中相关统计信息的不同,从而导致了同一个搜索串的评分的不一致,进而导致排序不一样.而造成这种主分片和副本统计信息不一致的具体原因,是因为文档删除
Elasticsearch由浅入深(十)搜索引擎:相关度评分 TF&IDF算法、doc value正排索引、解密query、fetch phrase原理、Bouncing Results问题、基于scoll技术滚动搜索大量数据
相关度评分 TF&IDF算法 Elasticsearch的相关度评分(relevance score)算法采用的是term frequency/inverse document frequency算法,简称为TF/IDF算法. 算法介绍: relevance score算法:简单来说就是,就是计算出一个索引中的文本,与搜索文本,它们之间的关联匹配程度. TF/IDF算法:分为两个部分,IF 和IDF Term Frequency(TF): 搜索文本中的各个词条在field文本中出现了多少次,出现
Haystack+ES解决搜索服务
最近项目组需要对老的搜索项目进行迁移和改造,刚入职2个星期的我光荣的接受了这份工作,这也是我第一次接触Haystack和Elasticsearch,以下是记录下工作中的一些需求解决,具体haystack的玩法大家可以看查看官方文档:https://django-haystack.readthedocs.io/en/master/,查看本文默认你已经基本了解了haystack的使用,包括基本的配置和使用 在开始之前,我还是有必要灌输几个概念:什么是ES,什么是Haystack,两者关
#研发解决方案介绍#基于ES的搜索+筛选+排序解决方案
郑昀 基于胡耀华和王超的设计文档 最后更新于2014/12/3 关键词:ElasticSearch.Lucene.solr.搜索.facet.高可用.可伸缩.mongodb.SearchHub.商品中心 本文档适用人员:研发和运维 提纲: 曾经的基于MongoDB的筛选+排序解决方案 MongoDB方案的缺陷 看中了搜索引擎的facet特性 看中了ES的简洁 看中了ES的天生分布式设计 窝窝的ES方案 ES的几次事故和教训 ES自身存在的问题 首先要感谢王超和胡耀华两位研发经理以严谨治学的研
ElasticSearch(二十四)基于scoll技术滚动搜索大量数据
1.为什么要使用scroll? 如果一次性要查出来比如10万条数据,那么性能会很差,此时一般会采取用scoll滚动查询,一批一批的查,直到所有数据都查询完处理完 2.原理 使用scoll滚动搜索,可以先搜索一批数据,然后下次再搜索一批数据,以此类推,直到搜索出全部的数据来scoll搜索会在第一次搜索的时候,保存一个当时的视图快照,之后只会基于该旧的视图快照提供数据搜索,如果这个期间数据变更,是不会让用户看到的采用基于_doc进行排序的方式,性能较高 每次发送scroll请求,我们还需要指定一个s
Elasticsearch---基于scroll技术滚动搜索大量数据
如果一次性要查出来比如10万条数据,那么性能会很差,此时一般会采取用scoll滚动查询,一批一批的查,直到所有数据都查询完处理完 使用scoll滚动搜索,可以先搜索一批数据,然后下次再搜索一批数据,以此类推,直到搜索出全部的数据来 scoll搜索会在第一次搜索的时候,保存一个当时的视图快照,之后只会基于该旧的视图快照提供数据搜索,如果这个期间数据变更,是不会让用户看到的 采用基于_doc进行排序的方式,性能较高 每次发送scroll请求,我们还需要指定一个scoll参数,指定一个时间窗口,每次搜
ie8用ajax访问不能每次都刷新的问题
最近发现,用ajax访问后台,用ie8访问,第一次可以正常返回值,后面就一直不会执行后台,总是返回第一次访问的结果. 用ie9,ie10等都没问题,chrome,等浏览器也没有问题. 测试后发现,是ie8缓存了第一次获取的结果,所以第二次不会提交到后台. 在ajax的请求后面加上一个随机数,使得每次的请求都不一致,ie就不会从缓存中获取结果了. 如在ajax的请求后面,加上 "....&random=" +Math.random(); 这样每次的请求都不一致,ie就不会从缓存中
hibernate查询出的数据和数据库不一致
之前直接使用hibernate的时候就出现过已经进行物理存储后的数据,查询不出来的情况,既然是已经存储后的数据,说明事务已经提交,想必问题出在查询时,查询的缓存,没有查询数据库.时有时无就很奇怪. 现在做项目使用spring的hibernateTemplate <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <
ElasticSearch 学习记录之ES高亮搜索
高亮搜索 ES 通过在查询的时候可以在查询之后的字段数据加上html 标签字段,使文档在在web 界面上显示的时候是由颜色或者字体格式的 GET /product/_search { "size": 200, "query": { "match_phrase": { "name": "上海" } }, "highlight": { "fields": { "
docker每次都重新拉取远程镜像的问题
将镜像上传到远程之后,dockerfile按理来说只需一次拉取远程镜像就好了,之后每次都是使用第一次拉取的远程镜像. 但是实际上出现的问题是:dockerfile每次都从远程拉取镜像,浪费了资源和时间. 搜索的很久才知道原因:如果docker的镜像名称里面包含了”-“,那么dockerfile每次都会从远程拉取镜像.
es 剩余磁盘空间达到es最小值,添加数据被block
剩余磁盘空间达到es最小值,添加数据被block PUT _all/_settings {"index.blocks.read_only_allow_delete": null} 解除每次search最大10000size的限制 PUT [xxx]/_settings { "max_result_window" : 20000 } 删除单个index全部内容 DELETE /new_listings_investment { "query": {
RabbitMQ默认情况下不保证每次都把消息传递
有意思,RabbitMQ默认情况下是不保证每次都把消息传递的,很多情况下我们都是这样发送数据的, channel.BasicPublish(QUEUE_NAME, String.Empty, null, payload);但这是不保证的. 必须要这样. channel.BasicAcks += channel_BasicAcks; channel.ConfirmSelect(); for (var i = 1; i <= numberOfMessages; i++)
解决Mac下SourceTree每次都让输入密码的问题
在Mac上操作sourcetree当pull和push时每次都是让输入密码,非常烦人,虽然大概知道是因为SSH什么的问题,但搜索百度也没发现解决办法. 于是乎搜索谷歌,发现如下解决办法. SourceTree -> Preferences -> Git -> Use System Git 中文版: SourceTree -> 偏好设置-> Git -> 使用系统安装的Git
Java实现 LeetCode 211 添加与搜索单词 - 数据结构设计
211. 添加与搜索单词 - 数据结构设计 设计一个支持以下两种操作的数据结构: void addWord(word) bool search(word) search(word) 可以搜索文字或正则表达式字符串,字符串只包含字母 . 或 a-z . . 可以表示任何一个字母. 示例: addWord("bad") addWord("dad") addWord("mad") search("pad") -> false
Git push 时每次都需要密码的疑惑
2015.1.13更新: 在本地搭建Git服务器时,也是有每次操作需要密码的情况. 是因为每次做推送动作时,Git需要认证你是好人.所以需要密码. 可以在 /home/username/.ssh/authorized_keys 文件里添加你的 ssh 公钥.一行一个.这样就可以在你push时,无需密码了. 如果该目录下没有 authorized 这个文件,就手动创建一个就可以了. ===================================== 以前用git时,各种pull push很
为什么每个请求都要有用户名密码呢,那不是每次都要查询一下了,token,表示这个用户已经验证通过了,在token有效期内,只需要判断token是否有效就可以了
为什么每个请求都要有用户名密码呢,那不是每次都要查询一下了,token,表示这个用户已经验证通过了,在token有效期内,只需要判断token是否有效就可以了
LISTVIEW嵌套GRIDVIEW的一些处理(点击GRIDVIEW的条目,能够显示他在LISTVIEW中的位置)(对这篇文章的优化处理,不每次都new onItemClickListener)
前几天写了点击GRIDVIEW的条目,能够显示他在LISTVIEW中的位置,当时的处理是在ListView的适配器里的GetView方法里每次都new GridView的onItemClickListener,这样显然是不合理的, /**GridVIew的条目点击监听*/ private GvOnItemClickListener mGvOnItemClickListener;//成员 这是Fragment的入口: @Override public View onCreateView(Layou
git 设置不需要输入密码, 去除 fetch / pull 代码每次都需要输入密码的烦恼
https方式每次都要输入密码,按照如下设置即可输入一次就不用再手输入密码的困扰而且又享受https带来的极速 设置记住密码(默认15分钟): git config --global credential.helper cache 如果想自己设置时间,可以这样做: git config credential.helper 'cache --timeout=3600' 这样就设置一个小时之后失效 长期存储密码: git config --global credential.helper store
使用git提交到github,每次都要输入用户名和密码的解决方法
使用git提交文件到github,每次都要输入用户名和密码,操作起来很麻烦,以下方法可解决,记录以下. 原因:在clone 项目的时候,使用了 https方式,而不是ssh方式. 默认clone 方式是:https 切换到:shh 方式 切换后如下: 解决方法: 到本地项目文件夹子,打开git bash 1.查看clone 地址:git remote -v 说明是https 方式,现在换成ssh方式. 2.移除https的方式,换成 ssh方式 git remote rm origin 3.添加
使用git提交代码到github,每次都要输入用户名和密码的解决方法
自从使用git提交代码到github后,发现自己使用git的功力增长了不少,但也遇到不少问题.比如,使用git提交代码到github的时候,经常要求输入用户名和密码,类似这种: 网上有这么一种解决方法:使用git提交到github,每次都要输入用户名和密码的解决方法 它使用方法,其实就是将https替换成了ssh.但始终觉得不怎么好,原因是,我在git clone别人项目的时候,一般是直接从浏览器中复制URL的,类似这种方式: 所以又找了找解决方案,终于找到解决办法, 1 找到项目的.git目录
Jupyter Notebook启动不会自动打开浏览器,每次都要自己打开浏览器输入网址
今天在使用jupyter 时,已启动服务,但每次都需要手动去浏览器 输入网址才可以, 最好找了好久才解决了. 去cmd 命令窗口执行jupyter notebook --generate-config 可以找到 Jupyter_notebook_config.py文件 在文件中 找到 #c.NotebookApp.notebook_dir = '' 注意这里的谷歌路径是自己安装的谷歌路径,路径必须时双” \\ “否则报错 这样就成功的解决了这个问题
热门专题
web api controler 多个get
centos keepalived 设置虚拟ip
jenkins 多任务串行执行,如何判断上个任务执行完毕
C# 乐观锁,悲观锁,自旋锁,互斥锁,原子锁
himl里面display
vue 循环object
vue循环,鼠标放上那个数据,哪个数据显示编辑
log4j.properties完整配置文件
nacos cpu占用率100% 问题
wundows2012 电话激活
Groovy 获取json的某个值
uml 一对多,多对多
java编译器如何处理函数参数
移动端 左右滚动时会上下滑动
android studio 如何添加lib32和lib64
TCP连接超时时间1秒
Android百度地图开发定位和路线导航
spring security 放开对静态资源权限
flutter 获取数据类型
oracle 删除最小id之外的重复数据