前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >[Elasticsearch] 部分匹配 (三) – 查询期间的即时搜索[通俗易懂]

[Elasticsearch] 部分匹配 (三) – 查询期间的即时搜索[通俗易懂]

作者头像
全栈程序员站长
发布于 2022-07-08 13:20:17
发布于 2022-07-08 13:20:17
1.1K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是全栈君。

本章翻译自Elasticsearch官方指南的Partial Matching一章。

查询期间的即时搜索(Query-time Search-as-you-type)

如今让我们来看看前缀匹配可以怎样帮助全文搜索

用户已经习惯于在完毕输入之前就看到搜索结果了 – 这被称为即时搜索(Instant Search, 或者Search-as-you-type)。这不仅让用户可以在更短的时间内看到搜索结果。也可以引导他们得到真实存在于我们的索引中的结果。

比方。假设用户输入了johnnie walker bl,我们会在用户输入完毕前显示Johnnie Walker Black Label和Johnnie Walker Blue Label相关的结果。

和往常一样,有多种方式可以达到我们的目的。首先我们从最简单的方式開始。你不须要以不论什么的方式准备你的数据,就行在不论什么全文字段(Full-text Field)上实现即时搜索。

短语匹配(Phrase Matching)中。我们介绍了match_phrase查询,它可以依据单词顺序来匹配全部的指定的单词。对于查询期间的即时搜索,我们可以使用该查询的一个特例,即match_phrase_prefix查询:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "match_phrase_prefix" : {
        "brand" : "johnnie walker bl"
    }
}

次查询和match_phrase查询的工作方式基本同样。除了它会将查询字符串中的最后一个单词当做一个前缀。换言之,前面的样例会查找下面内容:

  • johnnie
  • 紧接着的是walker
  • 紧接着的是以bl开头的单词

假设我们将该查询通过validate-query API运行,它会产生例如以下的解释:

“johnnie walker bl*”

和match_phrase查询一样。它可以接受一个slop參数(參见这里)来让单词间的顺序和相对位置不那么严格:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "match_phrase_prefix" : {
        "brand" : {
            "query": "walker johnnie bl", 
            "slop":  10
        }
    }
}

可是,查询字符串中的最后一个单词总是会被当做一个前缀。

在之前介绍prefix查询的时候,我们谈到了prefix查询的一些须要注意的地方 – prefix查询时怎样消耗资源的。在使用match_phrase_prefix查询的时候,也面临着相同的问题。一个前缀a你可以匹配很许多的词条。匹配这么多的词条不仅会消耗许多资源,同一时候对于用户而言也是没有多少用处的。

我们能够通过将參数max_expansions设置成一个合理的数值来限制前缀扩展(Prefix Expansion)的影响,比方50:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "match_phrase_prefix" : {
        "brand" : {
            "query":          "johnnie walker bl",
            "max_expansions": 50
        }
    }
}

max_expansions參数会控制可以匹配该前缀的词条的数量。它会找到首个以bl开头的词条然后開始收集(以字母表顺序)直到全部以bl开头的词条都被遍历了或者得到了比max_expansions很多其它的词条。

不要忘了在用户每敲入一个字符的时候。该查询就要被运行一次。因此它的速度须要快。假设第一个结果集不符合用户的期望,那么他们就会继续输入直到得到他们须要的结果。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/115778.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年1月3,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
一起学Elasticsearch系列-模糊搜索
在 Elasticsearch 中,模糊搜索是一种近似匹配的搜索方式。它允许找到与搜索词项相似但不完全相等的文档。
BookSea
2023/12/13
7950
一起学Elasticsearch系列-模糊搜索
白话Elasticsearch22- 深度探秘搜索技术之match_phrase_prefix实现search-time搜索推荐
https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query-phrase-prefix.html
小小工匠
2021/08/17
3160
ElasticSearch权威指南:深入搜索(下)
敏锐的读者会注意,目前为止本书介绍的所有查询都是针对整个词的操作。为了能匹配,只能查找倒排索引中存在的词,最小的单元为单个词。
HLee
2021/03/19
2.8K0
ElasticSearch权威指南:深入搜索(下)
19 个很有用的 ElasticSearch 查询语句 篇一
为了演示不同类型的 ElasticSearch 的查询,我们将使用书文档信息的集合(有以下字段:title(标题), authors(作者), summary(摘要), publish_date(发布日期)和 num_reviews(浏览数))。
我的小碗汤
2018/09/30
9.3K0
19 个很有用的 ElasticSearch 查询语句  篇一
Elasticsearch Query DSL之全文检索(Full text queries)上篇
全文索引查询,这意外着首先会对待查字符串(查询条件)进行分词,然后再去匹配,返回结果中会待上本次匹配的关联度分数。
丁威
2019/06/10
2.1K0
ES系列07:match_phrase与match_phrase_prefix query
ps:如果没看明白,那就来看下match_phrase query对应到mysql是怎样的吧!
方才编程_公众号同名
2020/11/13
2.6K0
ES系列07:match_phrase与match_phrase_prefix query
Elasticsearch使用:Search 概括
在 Elasticsearch 中的搜索中,有两类搜索:queries和aggregations。
HLee
2021/01/27
1.2K0
Elasticsearch使用:Search 概括
触类旁通Elasticsearch:搜索
ES的搜索请求执行流程如图1所示。图中索引包含两个分片,每个分片有一个副本分片。在给文档定位和评分后,缺省只会获取排名前10的文档。REST API搜索请求被发送到所连接的节点,该节点根据要查询的索引,将这个请求依次发送到所有的相关分片(主分片或者副本分片)。从所有分片收集到足够的排序和排名信息后,只有包含所需文档的分片被要求返回相关内容。这种搜索路由的行为是可配置的,图1展示的默认行为,称为查询后获取(query_then_fetch)。
用户1148526
2019/05/25
3.3K0
Elasticsearch实战 | match_phrase搜不出来,怎么办?
1、问题抛出 某个词组在Elasitcsearch中的某个document中存在,就一定通过某种匹配方式把它搜出来。 举例: title=公路局正在治理解放大道路面积水问题。 输入关键词:道路,能否
铭毅天下
2018/03/20
2.2K0
Elasticsearch实战 | match_phrase搜不出来,怎么办?
Elasticserach Tips
PS:感叹elasticsearch在搜索和大数据聚合上面做的了不起的工作! 细致入微,基本上在工程层面解决了数不清的细节问题,了不起的产品设计和再创造,了不起的工作量! 就像docker重新唤醒容器技术一样,elasticsearch在Lucene之上的构建为个人数据分析和企业数据梳理开创新时代。 如果有条件,我是极为愿意买入他们的股票的。
happy123.me
2019/12/30
4770
elasticsearch查询之全文检索
前言:全文检索是Elasticsearch提供的强大搜索引擎功能。可以实现对文本数据进行全面的搜索和匹配。全文检索是通过将查询词与文档中的文本内容进行匹配来实现的。
空洞的盒子
2023/11/23
1.9K1
Elasticsearch搜索特性
方案一、可以是用wildcard通配符,但是要设置不分词,这种方案性能不好 方案二、可以使用ngram分词器 “min_gram”: 2,”max_gram”: 3 单词假设是 abcde0001 ab bc cd abc cde 001.。。。等等 被分词2个字母一组和3个字符一组。。、。
丁D
2022/08/12
7910
ElasticSearch Server 扩展的弹性搜索解决方案
索引(相当数据库,包含行(代表文档)和列(字段)的表)、副本(用于控制查询性能及数据故障)、分片(每个分片就是一个Lucene索引)
凹谷
2020/04/11
1.6K0
ElasticSearch Server 扩展的弹性搜索解决方案
十九种Elasticsearch字符串搜索方式终极介绍
刚开始接触Elasticsearch的时候被Elasticsearch的搜索功能搞得晕头转向,每次想在Kibana里面查询某个字段的时候,查出来的结果经常不是自己想要的,然而又不知道问题出在了哪里。出现这个问题归根结底是因为对于Elasticsearch的底层索引原理以及各个查询搜索方式的不了解,在Elasticsearch中仅仅字符串相关的查询就有19个之多,如果不弄清楚查询语句的工作方式,应用可能就不会按照我们预想的方式运作。这篇文章就详细介绍了Elasticsearch的19种搜索方式及其原理,老板再也不用担心我用错搜索语句啦!
用户7353950
2022/05/10
1.3K0
es语法 rest api 模拟query 根据中文姓名搜索demo
oktokeep
2024/10/09
1130
ES系列九之常用查询api
title字段包含hello,且权重为10,也要包含like,但是otitle不包含cat,同事author字段包含Fyodor和dostoevsky。
热心的大肚皮
2023/02/28
6260
ES系列九之常用查询api
Elasticsearch 常用基本查询
安装启动很简单,参考官网步骤:https://www.elastic.co/downloads/elasticsearch
用户7353950
2022/05/10
7230
ES系列08:Full text queries(3) query_string系列
content.ik_smart_analyzer 字段的倒排列表【Posting List】
方才编程_公众号同名
2020/11/13
9740
ES系列08:Full text queries(3) query_string系列
Elasticsearch 查询时 term、match、match_phrase、match_phrase_prefix 的区别
今天要讲的好事发生文章是一篇关于函数式接口FUNCTION的介绍性文章,文章标题【了解函数式接口FUNCTION】,文章链接:https://cloud.tencent.com/developer/article/2472759 这篇文章介绍了Java中的函数式接口概念、特点、使用方式及在Stream API中的应用,强调了其在函数式编程中的重要性和灵活性。感兴趣的小伙伴可以参考一下。
六月的雨在Tencent
2024/12/02
1.7K0
elasticsearch深入搜索一之近似匹配
1. 从上面几种分词器的对比中可以看出,拼音分词器主要是把中文转换成拼音的方式进行分词; 2. ik_max_word分词和ik_smart分词器主要是索引单词而不是索引独立的单词; 3. standard分词器主要是索引独立的单词而不对词项进行索引。
山行AI
2019/06/28
2.8K0
相关推荐
一起学Elasticsearch系列-模糊搜索
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验