GET listofhistoricalfigures/_search
"query": {
"fuzzy": {
"name.keyword": "张三"
使用fuzzy就行百度一样,你输入个“邓子棋”,也能把“邓紫棋”查出来,有一定的纠错能力
加.keyword是要匹配完整的词
会匹配到的结果有
1.match 分词匹配检索,可以对查询条件分词,查到更多匹配的内容,结合不同的分词器,可以得到不同的效果
2.wildcard 通配符检索功能就像传统的SQL like一样,如果数据在es,你又想得到传统的“模糊查询”结构时,用wildcard
3.fuzzy 纠错检索,让输入条件有容错性
目录引子:DSL 和SQL中模糊查询一样吗ElasticSearch中的模糊查询match 分词匹配检索wildcard 通配符检索fuzzy 模糊/纠错检索结论引子:DSL 和SQL中模糊查询一样吗大家好,我是马儿今天来说一下模糊查询的事,我们使用关系型数据库时,模糊查询使用的就是like,加上通配符通配符说明%包含0个或多个字符的任意字符_(下划线)任意1个字符那ElasticSearch中模糊查询是什么呢,我们知道term是精确查询,有的地方说match是
1.1 需求描述
用Elasticsearch 实现类似SQL中like的功能('%aaa%'),查询数据时,要前后模糊匹配,不要分词(用户输入AAA,检索的结果中AAA需要连在一起,不能是AABA)
1.2 所需知识点
1.2.1 phrase-matching
phrase-matching 短语匹配 类似 match 查询, match_phrase 查询首先将查询字符串解析成一个词项列表,然后对这些词项进行搜索,但只保留那些包含全部搜索词项,且位置与搜索词项相同的文档。 比如对于quick
1、match查询:会先对搜索词进行分词,比如“白雪公主和苹果”,会分成“白雪”“公主”“苹果”。含有相关内容的字段,都会被检索出来。
2、match_phrase查询:match_phrase与slop一起用,能保证分词间的邻近关系,slop参数告诉match_phrase查询词条能够相隔多远时仍然将文档视为匹配,默认是0。为0时 必须相邻才能被检索出来。
例如下面的语句,会把“白雪公主吃苹果”...
multi_match查询提供了一个简便的方法用来对多个字段执行相同的查询,即对指定的多个字段进行match查询,其有三种类型,
best_fields,most_fields以及cross_fields,默认为best_fields。
比如使用同一个查询关键字同时在company和place中查询:
GET 51job/_doc/_search
"query": {
"multi_match" : {
"query"
1.match 分词匹配检索,可以对查询条件分词,查到更多匹配的内容,结合不同的分词器,可以得到不同的效果
2.wildcard 通配符检索功能就像传统的SQL like一样,如果数据在es,你又想得到传统的“模糊查询”结构时,用wildcard
3.fuzzy 纠错检索,让输入条件有容错性
ES模糊查询wildcard的替代方案,nGram + match_phrase
1.ES模糊查询wildcard查询极耗机器CPU资源,查询耗时高,当并发量高时影响ES其它进程。
2.用户实际的模糊查询需求大多是左右模糊匹配。
可行性分析
match_phrase能够实现词组查询。
比如brown fox会返回匹配…brown fox…的结果,此结果与wildcard查询传入brown fox的查询结果一致。相当于我们可以通过match_phrase实现一些特许的模糊查询需求。
那如何对match_
在实际的搜索中,我们有时候会打错字,从而导致搜索不到。在Elasticsearch中,我们可以使用fuzziness属性来进行模糊查询,从而达到搜索有错别字的情形。
match查询具有“fuziness”属性。它可以被设置为“0”, “1”, “2”或“auto”。“auto”是推荐的选项,它会根据查询词的长度定义距离。
Fuzzy query
返回包含与搜索词相似的词的文档,以Levens...
Elasticsearch 是一个开源搜索引擎,它提供了多种查询方式。
match_phrase: 是短语匹配,它会把查询的文本作为一个整体来匹配,保证匹配的文本顺序一致。
wildcard: 通配符匹配,可以使用 * 和 ? 匹配任意字符。
match: 是文本匹配,它会对查询的文本进行分词,然后匹配分词后的文本。
match_phrase: 短语匹配
wildcard: 通配符匹配
value:查询的关键字
boost:查询的权值,默认值是1.0
min_similarity:设置匹配的最小相似度,默认值为0.5, 对于字符串,取值为0-1(包括0和1);对于数值,取值可能大于1;对于日期型取值为1d,1m等,1d就代表1天
prefix_length:指明区分词项的共同前缀长度,默认是0
max_expansions:查询中的词项可以扩展的数目,...
在 Elasticsearch 7.9 中,我们将引入一种新的 “wildcard” 字段类型,该字段类型经过优化,可在字符串值中快速查找模式。这种新的字段类型采用了一种全新的方式来索引字符串数据,从而解决了在日志和安全性数据中高效索引和搜索的最佳实践。根据你现有的字段用法,通配符可以提供:
更简单的搜索表达式(无需将 AND /单词/短语组合在一起)
更简单的索引编制(无需定义分析器选择)
不再有的缺失值
更快的搜索
更少的磁盘使用
这种新数据类型最令人兴奋的功能是简化了部分匹配。使用通配符,你
const convert = require('elasql').convert
convert('SELECT id,name FROM shop WHERE shop_id BETWEEN 5 AND 10 AND type = "cat"')
"query": {
"bool": {
"must": [
"match": {
"type": "cat"
"must_not": [],
"filter": [