![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
elasticsearch
文章平均质量分 75
无风听海
这个作者很懒,什么都没留下…
展开
-
elasticsearch之使用正则表达式自定义分词逻辑
elasticsearch在索引和搜索之前都需要对输入的文本进行分词,elasticsearch提供的pattern analyzer使得我们可以通过正则表达式的简单方式来定义分隔符,从而达到自定义分词的处理逻辑;elasticsearch的Pattern Analyzer使用的Java Regular Expressions,只有了解Java中一些常用的正则表达式才能更好的自定义pattern analyzer;我们可以通过以下方式自定pattern analyzer,并设置分隔符为所有的空格符号;原创 2023-02-21 08:49:46 · 971 阅读 · 0 评论 -
elasticsearch之日期类型有点怪
通过以下代码可以看到,左边界的值会覆盖new MutableDateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeZone.UTC)对应的位置的数字,右边界的值会覆盖ew MutableDateTime(1970, 1, 1, 23, 59, 59, 999, DateTimeZone.UTC)对应位置的数字;索引数据的时候,elasticsearch内部会基于UTC时间,将传入的数据转化为基于milliseconds-since-the-epoch的一个长整型数字;原创 2023-02-15 08:52:26 · 1048 阅读 · 0 评论 -
elasticsearch之search template
elasticsearch提供了search template功能,其会在实际执行查询之前,对search template进行预处理并将参数填充到template中。我们新建id为search_template_test.match_name的search template,其主要是查询match 字段name;执行search template也支持使用profile来调试查看elasticsearch的查询执行情况;_search/template使用search template进行搜索;原创 2023-01-19 08:45:39 · 1665 阅读 · 0 评论 -
elasticsearch之exists查询
elastic search提供了exists查询,用以返回字段存在值的记录,默认情况下只有字段的值为null或者[]的时候,elasticsearch才会认为字段不存在;原创 2023-01-12 09:00:38 · 4916 阅读 · 0 评论 -
elasticsearch之单请求多查询
multi search返回的结果是responses数组,每个查询对应一个数组元素;有的时候我们需要同时执行多个查询,并且需要得到每个单独查询的搜索结果,elasticsearch提供了multi search此需求的支持;同时responses数组元素的顺序与查询是一 一对应的;每个查询可以通过自己的header设置查询执行的index,也可以是空的JSON对象,这是在URL中指定的index执行查询;五、multi search对search template的支持。查询查看已经索引的数据。原创 2023-01-05 18:23:50 · 1513 阅读 · 0 评论 -
elasticsearch查询之keyword字段的查询打分控制
match是elasticsearch提供的一个跟terms类似的查询,由于goods.id的type是keyword,所以需要给match指定一个查询时的analyzer,才能保证输入的几个id分开作为不同的查询;我们需要查询购买过某种商品的顾客,一般我们可以通过ui的业务逻辑得到需要筛选的一些商品的id,由于id字段是一个不需要分词的keyword字段,所以我们会直接使用term级别的查询;我们看下文档3的打分情况,每一个命中项的打分都是固定的1,最终的打分命中项的和;五、控制子查询的打分。...原创 2022-08-11 08:50:21 · 1597 阅读 · 0 评论 -
从查询重写角度理解elasticsearch的高亮原理
一、高亮的一些问题elasticsearch提供了三种高亮方式,前面我们已经简单的了解了elasticsearch的高亮原理; 高亮处理跟实际使用查询类型有十分紧密的关系,其中主要的一点就是muti term 查询的重写,例如wildcard、prefix等,由于查询本身和高亮都涉及到查询语句的重写,如果两者之间的重写机制不同,那么就可能会碰到以下情况相同的查询语句, 使用unified和fvh得到的高亮结果是不同的,甚至fvh Highlighter无任何高亮信息返回;二、数据环境elastics原创 2022-03-30 08:47:32 · 712 阅读 · 0 评论 -
elasticsearch高亮之Highlight原理
一、highlight简介highlight是提升用户体验的重要手段,搜索引擎通过高亮突出命中关键字等方式,方便用户通过关键字周围的信息快速的确认是否是自己希望的结果;highlight功能通常包含以下三个主要的处理过程1.将字段文本拆分为小的片段;2.找出最相关的片段;3.高亮查询关键字;二、elasticsearch的highlight功能elasticsearch提供了专门的高亮请求参数highlight,返回的记过中也会包含对应的高亮信息;在查询语句中,我们要求对text字段进行高亮原创 2022-03-17 08:37:54 · 3531 阅读 · 1 评论 -
elasticsearch高亮之词项向量
一、什么是词项向量词项向量(term vector)是有elasticsearch在index document的时候产生,其包含对document解析过程中产生的分词的一些信息,例如分词在字段值中的位置、开始和结束的字符位置、分词的元数据payloads等;term vector是单独进行存储的,会额外多占用一杯的空间,所以elasticsearch默认情况下禁用词项向量,如果要启用,我们需要在字段的mapping中使用term_vector进行设置;二、term_vector的配置选项term原创 2022-03-15 07:31:28 · 2546 阅读 · 1 评论 -
K近邻算法
一、K近邻算法简介K近邻算法(K-Nearest Neighbor)简称KNN算法,是最简单的预测模型之一,它没有多少数学上的假设,也不要求任何复杂的处理,它所要求的只有以下两点1.某种距离计算概念2.彼此接近的点具有相似的性质即对于一个新样本,算法在已有数据中寻找与它最相似的K个数据,或者说“离它最近”的K个数据,如果这K个数据大多数属于某个类别,则该样本也属于这个类别。KNN算法只依赖待预测节点附近的少量节点,有意的忽略了数据集中的大量样本,同时该算法也不能帮助我们理解事物现象背后的机制和原理原创 2022-03-03 09:04:22 · 2145 阅读 · 0 评论 -
elasticsearch算法之搜索模型(一)
面对海量的信息,我们很容易被淹没在信息的海洋中;当我们需要查找某个信息的时候,我们就会输入能够体现我们意图的关键字,搜索引擎会通过解析我们的关键字从而构造相应的查询表示方法;然后搜索引擎通过构造的查询在内存存储的文档集合中查找跟用户需求相关的文档,并根据相关度进行排序;以上搜索引擎进行计算的过程就是相关度计算,而其相关的理论基础就是检索模型;用户输入的是关键字,搜索引擎输出的是相关文档,从关键字和相关性两个角度可以将文档集合分为4个子集;检索模型要解决的就是尽量包含并提升set1、set3的排序;目前主流原创 2022-03-02 08:39:53 · 1667 阅读 · 0 评论 -
elasticsearch查询之三种fetch id的方案分析
一、使用场景介绍elasticsearch除了普通的全文检索之外,在很多的业务场景中都有使用,各个业务模块根据自己业务特色设置查询条件,通过elasticsearch执行并返回所有命中的记录的id;如果命中的记录数达到数万级别的话,查询性能会有明显的下降,尤其是命中超大型的document的时候;获取记录的id目前可以使用的有三种方式;通过_source:[“id”]设置_source:false,通过es返回的元数据_id分离出device的id;使用store=true来单独的存储device原创 2022-02-19 08:25:44 · 1650 阅读 · 0 评论 -
elasticsearch查询之图书智能推荐
一、elasticsearch智能推荐简介elasticsearch作为一个流行搜索引擎,通过用户输入的关键字来寻找匹配的文档,以便用户触达想要的信息;而推荐系统也是类似的处理过程,其首先拿到一个可以表征用户或者物品的数据记录,然后找到跟此记录最接近的记录推荐给用户;the more link this query查询与给定文档类似的文档,其首先选择一些可以代表输入文档的关键字,然后使用这些关键词构造查询语句,最后在索引中查找相似的文档;elasticsearch提供的more line this q原创 2022-02-11 09:07:18 · 2347 阅读 · 1 评论 -
elasticsearch查询之大数据集分页性能分析
一、测试环境python 3.7elasticsearch 6.8elasticsearch-dsl 7安装elasticsearch-dslpip install elasticsearch-dsl测试elasticsearch连通性from elasticsearch import Elasticsearchfrom elasticsearch_dsl import Searchclient = Elasticsearch(hosts=['http://127.0.0.1:920原创 2022-02-09 09:04:51 · 775 阅读 · 0 评论 -
elasticsearch查询之大数据集分页查询
一、 要解决的问题search命中的记录特别多,使用from+size分页,直接触发了elasticsearch的max_result_window的最大值;{ "error": { "root_cause": [ { "type": "query_phase_execution_exception", "reason": "Result window is too large, from + size must be less than or原创 2022-02-08 08:37:01 · 1191 阅读 · 0 评论 -
elasticsearch算法之推荐系统的相似度算法(一)
一、推荐系统简介推荐系统主要基于对用户历史的行为数据分析处理,寻找得到用户可能感兴趣的内容,从而实现主动向用户推荐其可能感兴趣的内容;从物品的长尾理论来看,推荐系统通过发掘用户的行为,找到用户的个性化需求,从而将长尾商品准确地推荐给需要它的用户,帮助用户发现那些他们感兴趣但很难发现的商品。推荐系统使用的是基于邻域的算法,一类是基于用户的协同过滤算法,另一类是基于物品的协同过滤算法;二、数据集准备我们采用GroupLens提供的MovieLens数据集These files contain 1,0原创 2022-01-27 08:45:15 · 1994 阅读 · 0 评论 -
elasticsearch算法之词项相似度算法(二)
六、莱文斯坦编辑距离前边的几种距离计算方法都是针对相同长度的词项,莱文斯坦编辑距离可以计算两个长度不同的单词之间的距离;莱文斯坦编辑距离是通过添加、删除、或者将一个字符替换为另外一个字符所需的最小编辑次数;我们假设两个单词u、v的长度分别为i、j,则其可以分以下几种情况进行计算当有一个单词的长度为0的时候,则编辑距离为不为零的单词的长度;ldu,v(i,j)=max(i,j) min(i,j)=0ld_{u,v}(i,j)=max(i,j)\; \; \; \; \;原创 2022-01-24 08:03:48 · 2086 阅读 · 0 评论 -
elasticsearch算法之词项相似度算法(一)
一、词项相似度elasticsearch支持拼写纠错,其建议词的获取就需要进行词项相似度的计算;今天我们来通过不同的距离算法来学习一下词项相似度算法;二、数据准备计算词项相似度,就需要首先将词项向量化;我们可以使用以下两种方法字符向量化,其将每个字符映射为一个唯一的数字,我们可以直接使用字符编码即可;import numpy as npdef vectorize_words(words): lower_words = [word.lower() for word in words]原创 2022-01-20 08:42:30 · 2313 阅读 · 0 评论 -
elasticsearch拼写纠错之Term Suggester
一、什么是拼写纠错拼写纠错就是搜索引擎可以智能的感知用户输入关键字的错误,并使用纠正过的关键字进行搜索展示给用户;拼写纠错是一种改善用户体验的功能;elasticsearch提供了以下不同类型的suggester来完成拼写纠错和自动完成功能;term suggester主要针对单个的term分词进行纠正的场景;phrase suggester主要针对整个短语的拼写纠正场景;completion suggester主要提供一种快速高效的自动提示功能;二、Term Suggester基于单个词的拼写原创 2022-01-16 22:40:13 · 1787 阅读 · 0 评论 -
elasticsearch之拼音搜索
拼音搜索在中文搜索环境中是经常使用的一种功能,用户只需要输入关键词的拼音全拼或者拼音首字母,搜索引擎就可以搜索出相关结果。在国内,中文输入法基本上都是基于汉语拼音的,这种在符合用户输入习惯的条件下缩短用户输入时间的功能是非常受欢迎的;一、安装拼音搜索插件下载对应版本的elasticsearch-analysis-pinyin插件;https://github.com/medcl/elasticsearch-analysis-pinyin/releases/download/v7.9.2/elastic原创 2022-01-14 09:00:52 · 1662 阅读 · 0 评论 -
MongoDB之几种情况下的索引选择策略
一、MongoDB如何选择索引如果我们在Collection建了5个index,那么当我们查询的时候,MongoDB会根据查询语句的筛选条件、sort排序等来定位可以使用的index作为候选索引;然后MongoDB会创建对应数量的查询计划,并分别使用不同线程执行查询计划,最终会选择一个执行最快的index;但是这个选择也不是一成不变的,后续还会有一段时间根据实际执行情况动态调整;二、数据准备for(let i = 0;i<1000000;i++){ db.users.insertOne原创 2022-01-11 08:38:49 · 1034 阅读 · 0 评论 -
子字符串查找算法
一、什么是子字符串查找子字符串查找是一种基本的字符串操作,是给定一段长度为N的文本和一个长度为M的模式(pattern)字符串,在文本中找到一个和该模式相符的子字符串的操作;在实际的应用场景中,模式相对文本来说是很短的,即M远小于N,我们一般也会对模式进行预处理来支持在文本中的快速查找。二、测试环境及基础类开发语言使用的是C#;StringSearcher基础的基类,负责加载文件内容、字符串查找、性能测试等; public abstract class StringSearcher原创 2022-01-04 08:56:54 · 2471 阅读 · 0 评论 -
elasticsearch之多索引查询
一、问题源起在elasticsearch的查询中,我们一般直接通过URL来设置要search的index; 如果我们需要查询的索引比较多并且没有什么规律的话,就会面临一个尴尬的局面,超过URL的长度限制;二、测试环境elasticsearch 6.8.12测试数据新增三个测试的index,每个index里边一个document;PUT test1/_doc/1{ "id":1, "name":"test1-1"}# {# "_index" : "test1",# "原创 2021-12-31 07:54:35 · 10602 阅读 · 1 评论 -
elasticsearch支持大table格式数据的搜索
一、问题源起数据情况TableMeta, 保存table的元数据,通过fileId关联具体的GridFS文件;idnamecreatorfileId1table1mangof12table2mangof2table内包含列名和具体的行数据;不同类型的table,列的名字和数量都可能不同;from fport to toport location192.168.1.1 11 192.168.1.12 11 chaoyang192.168.1.2 2原创 2021-09-07 22:27:04 · 649 阅读 · 1 评论 -
elasticsearch之自定义Java代码的安全策略管理
提出问题在我们首次使用intellij直接运行elasticsearch的源代码的时候,我们必然会碰到下边这样一个安全性的问题(异常堆栈只截取了一部分),如果在深夜中静下心来思考一下,为什么直接执行发行包不发生这个错误呢?Caused by: java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "createClassLoader") at java.security.AccessC原创 2021-03-25 22:16:14 · 306 阅读 · 0 评论 -
elasticsearch,使用normalizer优化keyword字段的查询
我们知道elasticsearch提供了很多的字段类型,当我们索引结构化的简单字段的时候可以使用keyword类型,例如id,email、主机名、状态码、标签、邮政编码等;但是keyword字段类型在索引的时候,并不会对字段的值进行一些预处理,也就是直接保留字段的原值。当我们使用如下文档进行索引的时候,es到底是怎样进行索引处理的呢?{"id":1,"name":"code"}Es字段的索引是通过对应类型的mapper进行处理,通过KeywordFieldMapp...原创 2021-03-19 14:01:47 · 3263 阅读 · 1 评论