Elastic Search之——全文检索函数QUERY()和MATCH()

Elastic Search之——全文检索函数QUERY()和MATCH(),第1张

Elastic Search之——全文检索函数QUERY()和MATCH() 一、简介

MATCH()、QUERY()函数分别为ES DSL原生查询multi_match、query_string的变种,区别在于前者是函数,作用于ES SQL,方便用户以ES SQL的方式对数据进行全文检索;后者是ES DSL原生查询的全文搜索谓词,具体使用示例可见ES 官网。

multi_match
query_steing
MATCH()和QUERY()

二、使用

具体使用示例这里不做详细记录,官网上介绍的很详细。这边主要介绍QUERY()和MATCH()在使用上的区别

1.上面也有介绍到,QUERY()和MATCH()分别为multi_match和query_string的变种,而后者的区别在于query_string可以支持检索内容中使用 *** 作符(or | and),更接近Lucene原生查询语法,这点同样也体现在函数上,因此建议在日常使用中选择QUERY函数或query_string查询,这是更符合全文检索的查询方式。

"query":"select * from app_table where query('hupu AND zhihu')"

2.我们在使用过程中,可能不希望一些字段的数据被用户检索到,那么我们就需要在检索时指定某些字段可支持检索。
MATCH()函数在使用中可以很方便的指定可选字段
示例:

SELECt
    SCORE(),*
FROM
    student
WHERe
    MATCH('name,age,class,math,english','linan')
    AND math>'80'
ORDER BY
    SCORE() DESC

SCORE()通常结合MATCH()或QUERY()一起使用,可以对查询结果匹配度进行打分,默认根据查询相关性降序展示。

QUERY()与MATCH()相比较为复杂了一些,在真正的使用过程中需要对每个支持查询的字段进行参数赋值
示例:

SELECt
    SCORE(), *
FROM
    student
WHERe
    QUERY('name:wang age:wang class:wang math:wang english:wang')
    AND math > '80'
ORDER BY
    SCORE() DESC

3.在使用过程中,对QUERY()查询性能简单做了测试
测试环境

10亿数据量

测试结果

1.QUERY()函数在大数据量的查询性能优秀,在千万、亿级别的数据量下,绝大多数的检索都可以达到毫秒级的查询性能。
2.QUERY()检索不指定 *** 作符默认为 or 查询,在中文检索时,输入多个汉字可能会出现数据量匹配过多的问题,影响查询性能。
3.ES 内置中文分词器对中文采用的方法为单字切分,使用开源的中文分词器可以解决检索过程中文解析过于复杂的问题。如IK分词器。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5710597.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存