首页 > 其他分享 >elasticsearch模糊查询match match_phrase wildcard regexp prefix的区别

elasticsearch模糊查询match match_phrase wildcard regexp prefix的区别

时间:2022-11-25 15:37:34浏览次数:83  
标签:regexp 查询 content prefix elasticsearch query phrase match


1.match查询

会先对搜索词进行分词,比如“白雪公主和苹果”,会分成“白雪”“公主”“苹果”。含有相关内容的字段,都会被检索出来。

2.match_phrase查询

match_phrase与slop一起用,能保证分词间的邻近关系,slop参数告诉match_phrase查询词条能够相隔多远时仍然将文档视为匹配,默认是0。为0时 必须相邻才能被检索出来。
例如下面的语句,会把“白雪公主吃苹果”也能检索出来

GET my_index/_search
{
"query": {
"bool": {
"must": [
{
"match_phrase": {
"content": "白雪公主和苹果",
"slop":1
}
}
]
}
}
}

 

在对查询字段定义了分词器的情况下,会使用分词器对输入进行分词,然后返回满足下述两个条件的document:

  1.match_phase中的所有term都出现在待查询字段之中

  2.待查询字段之中的所有term都必须和match_phase具有相同的顺序

 

3.wildcard查询

是使用通配符进行查询,其中?代表任意一个字符*代表任意的一个或多个字符。
下面的语句会把包含“公主”这个词语的内容检索出来。

GET my_index/_search
{
"query": {
"bool": {
"must": [
{
"wildcard": {
"content": "*公主*"
}
}
]
}
}
}

这也是一种不分词查询的方法,比如content内容是 aaaa或者中英文数字混合 ,你搜索 aaa的时候match和match_phrase都查不出来

但是用wildcard模糊查询就可以查出来,最好避免在检索词的开头使用 * 或者 ?,这会降低搜索性能。大部分情况后面放个*就满足需求了。

 

 

4.regexp查询

基于词条,正则表达式查询的性能在很大程度上取决于所选的正则表达式。匹配像 .* 这样的所有内容非常慢,并且使用环绕正则表达式。如果可能,您应该在正则表达式开始之前尝试使用长前缀。

像 .* ?+这样的通配符匹配器会降低性能,尽量不要使用。

 

GET my_index/_search
{
"query": {
"bool": {
"must": [
{
"regexp": {
"content": "公主.*苹果"
}
}
]
}
}
}

 

参考:​​https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-regexp-query.html​

 

5.prefix查询

基于词条,查询已什么开头的内容,前缀查询映射到Lucene PrefixQuery。

如果满足你的需求,前缀匹配是优于wildcard和regexp。

GET comment/_search
{
"query": {
"bool": {
"must": [
{
"prefix": {
"content": "hhh"
}
}
]
}
}
}

参考:​​https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-prefix-query.html​


标签:regexp,查询,content,prefix,elasticsearch,query,phrase,match
From: https://blog.51cto.com/u_6353447/5886786

相关文章

  • elasticsearch基于地理位置的搜索
    场景 现在基于地理位置的app层出不穷,支持地理位置的组件也有不少,Elasticsearch也不例外,并且ES可以把地理位置、全文搜索、结构化搜索和分析结合到一起,我们来看一下。 注意......
  • elasticsearch中query和filter区别
    区别在进行query的时候,除了完成匹配的过程,我们实际上在问“这个结果到底有多匹配我们的搜索关键词”。在所有的返回结果的后面都会有一个​​_score​​字段表示这个结果的......
  • elasticsearch中分析器的原理和使用
    概念分析(analysis)机制用于进行全文文本(FullText)的分词,以建立供搜索用的反向索引。 原理分析器的工作过程大概分成两步:分词(Tokenization):根据停止词把文本分割成很多的......
  • elasticsearch中倒排索引详解
    概念 Elasticsearch使用一种叫做倒排索引(invertedindex)的结构来做快速的全文搜索。倒排索引由在文档中出现的唯一的单词列表,以及对于每个单词在文档中的位置组成。 示......
  • elasticsearch中的基本概念和原理
    基本概念和原理ES其实就是基于lucene之上封装的一个分布式索引框架,所以lucene拥有的特性,它都是有的,同时因为它是基于分布式的,所以对很多的功能进行了扩展,要想掌握ES,......
  • elasticsearch 之 histogram 直方图聚合
    目录1.简介2.bucket_key如何计算3.有一组数据,如何确定是落入到那个桶中4、需求4.1准备mapping4.2准备数据5、histogram聚合操作5.1、根据response_time聚合,间隔为55.1......
  • HTTPS handshake returned error SEC_E_ALGORITHM_MISMATCH.
    HTTP/1.1502Fiddler-ConnectionFailedDate:Fri,25Nov202202:59:58GMTContent-Type:text/html;charset=UTF-8Connection:closeCache-Control:no-cache,must......
  • Vulhub ElasticSearch
    VulhubElasticSearch默认情况下,ElasticSearch使用两个端口监听外部TCP流量9200端口:用于所有通过HTTP协议进行的API调用。包括搜索、聚合、监控以及所有通过HTTP协议进行......
  • ElasticSearch中查询(排序、高亮、分页、Filter过滤、_source筛选)
    排序(sort)sort可以让我们按照不同的字段进行排序,并且通过order指定排序的方式asc升序desc倒序GETmy_index/_search{"query":{"match":{"title":......
  • PHP 如何使用 Elasticsearch API接口
    一、实战场景如何在 PHP 中使用 ElasticsearchAPI 接口二、知识点PHPElasticsearchRestful 接口三、菜鸟实战1、安装 Elasticsearch 官方 PHPSDK​​https://gith......