第17篇:Elasticsearch精确查询与全文查询

背景:目前国内有大量的公司都在使用 Elasticsearch,包括阿里、京东、滴滴、今日头条、小米、vivo等诸多知名公司。除了搜索功能之外,Elasticsearch还结合Kibana、Logstash、Elastic Stack还被广泛运用在大数据近实时分析领域,包括日志分析、指标监控等多个领域。 

本节内容:Elasticsearch精确查询与全文查询。

目录

1、精确值查询(Exact values)

1.1 关系型数据库MYSQL精确查询

1.2 Elasticsearch精确查询

2、全文查询(Full text)

2.1 关系型数据库MySQL全文搜索

2.2 Elasticsearch全文搜索


Elasticsearch中数据可分为两类:精确值查询和全文查询。

1、精确值查询(Exact values)

精确值查询也就是精准查询。例如,我们通常使用到的用户信息查询。精确字段有用户ID、用户名、生日、邮箱地址等。那对于精确值来讲,比如姓名“王二” 和 “王二小” 是不同的,日期2022 和 2022-01-01也是不同的。

精确值查询很容易,结果无非两种:要么匹配、要么不匹配。这种查询很容易用 SQL 表示。

1.1 关系型数据库MYSQL精确查询

SELECT *
FROM user
WHERE name = '王二'
	AND user_id = 10001
	AND date > '2022-01-01'

1.2 Elasticsearch精确查询

http://127.0.0.1:9200/student/_search?q=name:test9

2、全文查询(Full text)

全文查询是指文本数据,例如一篇博客的内容、一封邮件的内容或者一篇日记内容。全文通常是指非结构化的数据,由于非结构化数据的规则是复杂的,这也导致计算机难以进行正确的解析。

例如,我们看下面这个句子是指的月份还是指的人呢?

May is fun but June bores me(五月很有趣,但六月让我厌烦)。

查询全文数据要比精确查询从语义角度上微妙的多。从语义来看,我们问的不只是“这个文档匹配查询吗”,而是“该文档匹配查询的程度有多大?”,换句话说,也就是该文档与给定查询关键字的相关性如何?一文读懂Elasticsearch强大的排序能力(相关性参考)

在实际业务当中,很少对全文类型的域做精确匹配。反之,更多的是希望在文本类型的域中进行搜索。不仅如此,有时候还希望搜索能够理解我们的意图(有一些人工智能的意思)。

比如:当搜索 UK 时,会返回包含“United Kindom”的文档;当搜索 jump 时,会匹配 jumped , jumps , jumping ,甚至是 leap 。

2.1 关系型数据库MySQL全文搜索

SELECT *
FROM user
WHERE name like '%王二%' -- 模糊查询

2.2 Elasticsearch全文搜索

{
    "query" : {
        "match" : {
            "love" : "rock albums" //匹配带rock albums的文档
        }
    }
}

为了能够满足在全文域中查询,Elasticsearch 首先需要分析文档。然后,根据分析结果创建倒排索引 。

那倒排索引原理和分析过程的是什么样的呢?我们下篇继续聊。

猜你喜欢

转载自blog.csdn.net/wangyongfei5000/article/details/125241656