![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ES
qq_42383787
这个作者很懒,什么都没留下…
展开
-
ES 搜索引擎 介绍 和基础命令
MVC 配置(非Boot)<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="htt...原创 2019-08-23 15:29:42 · 391 阅读 · 0 评论 -
ES 搜索10 (match_phrase 搜索 多值字段)
多值字段对多值字段使用短语匹配时会发生奇怪的事。想象一下你索引这个文档:PUT /my_index/groups/1{ "names": [ "John Abraham", "Lincoln Smith"]}然后运行一个对Abraham Lincoln的短语查询:GET /my_index/groups/_search{ "query": { ...原创 2019-08-23 15:28:32 · 4910 阅读 · 0 评论 -
ES 搜索10 (match、match_phrase 性能优化)
性能优化:短语查询和邻近查询都比简单的query查询代价更高。 一个match查询仅仅是看词条是否存在于倒排索引中,而一个match_phrase查询是必须计算并比较多个可能重复词项的位置。match query的性能比match_phrase和proximity match(有slop)要高很多,因为后两者都要计算position的距离。match query比match...原创 2019-08-23 15:28:16 · 2629 阅读 · 0 评论 -
ES 搜索17 (通配符与正则表达式查询)
通配符与正则表达式查询与prefix前缀查询的特性类似,wildcard通配符查询也是一种底层基于词的查询,与前缀查询不同的是它允许指定匹配的正则式。它使用标准的 shell 通配符查询:?匹配任意字符,*匹配 0 或多个字符。这个查询会匹配包含W1F 7HW和W2F 8HW的文档:GET /my_index/address/_search{ "q...原创 2019-08-23 15:28:11 · 2802 阅读 · 0 评论 -
ES 搜索18 (match_phrase_prefix 查询时输入即搜索)
查询时输入即搜索把邮编的事情先放一边,让我们先看看前缀查询是如何在全文查询中起作用的。用户已经渐渐习惯在输完查询内容之前,就能为他们展现搜索结果,这就是所谓的即时搜索(instant search)或输入即搜索(search-as-you-type)。不仅用户能在更短的时间内得到搜索结果,我们也能引导用户搜索索引中真实存在的结果。例如,如果用户输入johnnie walker ...原创 2019-08-23 15:28:07 · 842 阅读 · 0 评论 -
ES 搜索6 (匹配查询)
匹配查询匹配查询match是个核心查询。无论需要查询什么字段,match查询都应该会是首选的查询方式。它是一个高级全文查询,这表示它既能处理全文字段,又能处理精确字段。这就是说,match查询主要的应用场景就是进行全文搜索,我们以下面一个简单例子来说明全文搜索是如何工作的:单个词查询我们用第一个示例来解释使用match查询搜索全文字段中的单个词:...原创 2019-08-23 15:29:38 · 968 阅读 · 0 评论 -
ES 搜索7 (多词查询)
多词查询如果我们一次只能搜索一个词,那么全文搜索就会不太灵活,幸运的是match查询让多词查询变得简单:GET /my_index/my_type/_search{ "query": { "match": { "title": "BROWN DOG!" } }}上面这个查询返回所有四个文档:{ ...原创 2019-08-23 15:29:34 · 1896 阅读 · 1 评论 -
ES 搜索8 (组合查询)
组合查询在组合过滤器中,我们讨论过如何使用bool过滤器通过and、or和not逻辑组合将多个过滤器进行组合。在查询中,bool查询有类似的功能,只有一个重要的区别。过滤器做二元判断:文档是否应该出现在结果中?但查询更精妙,它除了决定一个文档是否应该被包括在结果中,还会计算文档的相关程度。与过滤器一样,bool查询也可以接受must、must_no...原创 2019-08-23 15:29:26 · 489 阅读 · 0 评论 -
ES 搜索9 (布尔匹配)
如何使用布尔匹配目前为止,可能已经意识到多词match查询只是简单地将生成的term查询包裹在一个bool查询中。如果使用默认的or操作符,每个term查询都被当作should语句,这样就要求必须至少匹配一条语句。以下两个查询是等价的:{ "match": { "title": "brown fox"}}{ "bool": { "sh...原创 2019-08-23 15:29:22 · 219 阅读 · 0 评论 -
ES 搜索10 (match、match_phrase、query_string、term、dis_max 的区别)
(一)text字段和keyword字段的区别以下给出一个例子:首先建立一个索引和类型,引入一个keywork的字段:PUT my_index{ "mappings": { "products": { "properties": { "name": { "type": "keyword" } }...原创 2019-08-23 15:27:48 · 984 阅读 · 0 评论 -
ES 搜索11 (查询语句提升权重)
查询语句提升权重当然bool查询不仅限于组合简单的单个词match查询,它可以组合任意其他的查询,以及其他bool查询。普遍的用法是通过汇总多个独立查询的分数,从而达到为每个文档微调其相关度评分_score的目的。假设想要查询关于 “full-text search(全文搜索)” 的文档,但我们希望为提及 “Elasticsearch” 或 “Lucene” 的文档给予...原创 2019-08-23 15:29:19 · 4187 阅读 · 3 评论 -
ES 搜索19 (match 查询时权重提升)
查询时权重提升在语句优先级(Prioritizing Clauses)中,我们解释过如何在搜索时使用boost参数让一个查询语句比其他语句更重要。例如:GET /_search{ "query": { "bool": { "should": [ { "match": { "title": {...原创 2019-08-23 15:27:39 · 1757 阅读 · 0 评论 -
ES 搜索20 (function_score 和 field_value_factor 自定义评分)
自定义评分设想有个网站供用户发布博客并且可以让他们为自己喜欢的博客点赞,我们希望将更受欢迎的博客放在搜索结果列表中相对较上的位置,同时全文搜索的评分仍然作为相关度的主要排序依据,可以简单的通过存储每个博客的点赞数来实现它:在搜索时,可以将function_score查询与field_value_factor结合使用,即将点赞数与全文相关度评分结合:GET /blogpos...原创 2019-08-23 15:27:25 · 1129 阅读 · 0 评论 -
ES 搜索21 (function_score查询 关键字 functions 和 weight 滤集提升权重分)
过滤集提升权重回到忽略 TF/IDF里处理过的问题,我们希望根据每个度假屋的特性数量来评分,当时我们希望能用缓存的过滤器来影响评分,现在function_score查询正好可以完成这件事情。到目前为止,我们展现的都是为所有文档应用单个函数的使用方式,现在会用过滤器将结果划分为多个子集(每个特性一个过滤器),并为每个子集使用不同的函数。functions是一个数组,裡面放著的...原创 2019-08-23 16:00:18 · 1526 阅读 · 0 评论 -
ES 搜索19 (constant_score查询 忽略评分)
忽略 TF/IDF (忽略评分)有时候我们根本不关心 TF/IDF ,只想知道一个词是否在某个字段中出现过。可能搜索一个度假屋并希望它能尽可能有以下设施:WiFi Garden(花园) Pool(游泳池)这个度假屋的文档如下:{ "description": "A delightful four-bedroomed house with ... " }可以用简单的mat...原创 2019-08-23 15:27:31 · 7468 阅读 · 0 评论 -
ES 搜索24 (match 和 multi_match 拼写错误的模糊查询 fuzziness 和 fuzzy 关键字)
模糊性模糊匹配对待 “模糊” 相似的两个词似乎是同一个词。首先,我们需要对我们所说的模糊性进行定义。在1965年,Vladimir Levenshtein 开发出了Levenshtein distance, 用来度量从一个单词转换到另一个单词需要多少次单字符编辑。他提出了三种类型的单字符编辑:一个字符替换另一个字符: _f_ox → _b_ox 插入一个新的字符:si...原创 2019-08-26 14:57:58 · 2442 阅读 · 0 评论 -
AES 对称加密 (JDK)
/** * AES 加密 解密 */ //key生成 KeyGenerator keyGenerator = KeyGenerator.getInstance("AES"); //长度有 64 112 128 192 256 keyGenerator.init(256); ...原创 2019-08-27 09:35:41 · 674 阅读 · 0 评论 -
ES 搜索16 (自定义 _all 字段 copy_to关键字)
自定义 _all 字段在all-field字段中,我们解释过_all字段的索引方式是将所有其他字段的值作为一个大字符串索引的。然而这么做并不十分灵活,为了灵活我们可以给人名添加一个自定义_all字段,再为地址添加另一个_all字段。Elasticsearch 在字段映射中为我们提供copy_to参数来实现这个功能:PUT /my_index{ "map...原创 2019-08-23 15:28:59 · 1432 阅读 · 0 评论 -
ES 搜索14 (dis_max 最佳字段查询调优)
最佳字段查询调优当用户搜索 “quick pets” 时会发生什么呢?在前面的例子中,两个文档都包含词quick,但是只有文档 2 包含词pets,两个文档中都不具有同时包含两个词的相同字段。如下,一个简单的dis_max查询会采用单个最佳匹配字段,而忽略其他的匹配:{ "query": { "dis_max": { ...原创 2019-08-23 15:28:21 · 575 阅读 · 0 评论 -
ES QueryBuilder学习
public void test() throws IOException { # 创建一个Search 对象 SearchRequest searchRequest = new SearchRequest(); # 创建一个Builder 对象 对条件进行封装 SearchSourceBuilder searchS...原创 2019-04-24 09:10:40 · 12550 阅读 · 6 评论 -
ES 搜索1 (精确查找)
term 查询数字我们首先来看最为常用的term查询,可以用它处理数字(numbers)、布尔值(Booleans)、日期(dates)以及文本(text)。我们想要做的是查找具有某个价格的所有产品,有关系数据库背景的人肯定熟悉 SQL,如果我们将其用 SQL 形式表达,会是下面这样:SELECT documentFROM productsWHERE price ...原创 2019-08-23 15:29:59 · 1741 阅读 · 0 评论 -
ES 搜索2 (组合过滤器)
组合过滤器前面的两个例子都是单个过滤器(filter)的使用方式。在实际应用中,我们很有可能会过滤多个值或字段。比方说,怎样用 Elasticsearch 来表达下面的 SQL ?SELECT productFROM productsWHERE (price = 20 OR productID = "XHDK-A-1293-#fJ3") AND (price != 30...原创 2019-08-23 15:28:46 · 891 阅读 · 0 评论 -
ES 搜索3 (查找多个精确值)
查找多个精确值term查询对于查找单个值非常有用,但通常我们可能想搜索多个值。如果我们想要查找价格字段值为 $20 或 $30 的文档该如何处理呢?不需要使用多个term查询,我们只要用单个terms查询(注意末尾的s),terms查询好比是term查询的复数形式(以英语名词的单复数做比)。它几乎与term的使用方式一模一样,与指定单个价格不同,我们只要将t...原创 2019-08-23 15:29:55 · 5713 阅读 · 0 评论 -
ES 搜索4 (范围)
范围本章到目前为止,对于数字,只介绍如何处理精确值查询。实际上,对数字范围进行过滤有时会更有用。例如,我们可能想要查找所有价格大于 $20 且小于 $40 美元的产品。在 SQL 中,范围查询可以表示为:SELECT documentFROM productsWHERE price BETWEEN 20 AND 40Elasticsearch 有range查询,...原创 2019-08-23 15:29:51 · 1849 阅读 · 0 评论 -
ES 搜索5 (处理 Null 值)
处理 Null 值我们的目标是找到那些被设置过标签字段的文档,并不关心标签的具体内容。只要它存在于文档中即可,用 SQL 的话就是用IS NOT NULL非空进行查询:SELECT tagsFROM postsWHERE tags IS NOT NULL在 Elasticsearch 中,使用exists查询的方式如下:GET /my_index/posts/...原创 2019-08-23 15:29:47 · 1789 阅读 · 0 评论 -
ES 搜索12 (控制字段的存储选项)
控制字段的存储选项ES底层使用Lucene存储数据,主要包括行存(StoreFiled)、列存(DocValues)和倒排索引(InvertIndex)三部分。 大多数使用场景中,没有必要同时存储这三个部分,可以通过下面的参数来做适当调整:StoreFiled: 行存,其中占比最大的是source字段,它控制doc原始数据的存储。在写入数据时,ES把doc原始数据的整个json结构体当做一...原创 2019-08-23 15:29:14 · 434 阅读 · 0 评论 -
ES 测试分词
es中的分词器由三部分组成1、character filter:作用:先对要进行分析的文本进行一下过滤,比如html文档,去除其中的标签,比如<p>、<html>等等;2、tokenizer:作用:对文本进行分词,把要进行分析的文本根据所指定的规则,按照其规则把文本拆分为单词,,只可以指定一个;3、tokenizer filter:作用:把分好的词条(也即将to...原创 2019-08-23 15:29:10 · 1691 阅读 · 0 评论 -
ES 搜索13 (多字符串查询)
多字符串查询最简单的多字段查询可以将搜索项映射到具体的字段。如果我们知道War and Peace是标题,Leo Tolstoy 是作者,很容易就能把两个条件用match语句表示,并将它们用bool查询组合起来:GET /_search{ "query": { "bool": { "should": [ { "match": {...原创 2019-08-23 15:28:25 · 560 阅读 · 0 评论 -
ES 搜索15 (multi_match 查询 及 best_fields、most_fields、cross_fields 3种策略介绍)
multi_match 查询multi_match查询为能在多个字段上反复执行相同查询提供了一种便捷方式。multi_match多匹配查询的类型有多种,其中的三种恰巧与了解我们的数据中介绍的三个场景对应,即:best_fields、most_fields和cross_fields(最佳字段、多数字段、跨字段)。默认情况下,查询的类型是best_fields...原创 2019-08-23 15:28:43 · 2014 阅读 · 0 评论 -
ES 搜索22 (function_score 支持的衰减函数 linear、exp 和 gauss)
衰减函数很多变量都可以影响用户对于酒店的选择,像是用户可能希望酒店离市中心近一点,但是如果价格足够便宜,也愿意为了省钱,妥协选择一个更远的住处如果我们只是使用一个 filter 排除所有市中心方圆 100 米以外的酒店,再用一个filter排除每晚价格超过100元的酒店,这种作法太过强硬,可能有一间房在 500米,但是超级便宜一晚只要10元,用户可能会因此愿意妥协住这间房为了解决这个...原创 2019-08-24 14:35:13 · 1811 阅读 · 0 评论 -
ES 搜索24 (wildcard通配符查询 类似 MySQL的like查询)
非常消耗性能:# 使用案例1:{ "query":{ "wildcard":{ "communityName":"*测试*" } }}#使用案例2:{ "query": { "bool": { "must": [ { "bool": { "should": [...原创 2019-09-03 14:16:11 · 2109 阅读 · 0 评论