elasticsearch笔记——词项查询

全文搜索在执行查询之前会分析查询字符串,词项查询之前不会对查询字符串分词解析。词项查询通常用于结构化数据,比如数字、日期和枚举类。

一、term

term query 用于词项搜索,查询之前不会对查询字符串进行分词解析,查询参数也不允许指定分词器。

{
	"query": {
		"term": {
			"title": "程序"
		}
	}
}

二、terms

terms 查询是 term 查询的升级,可以用来查询文档中包含多个词的文档。

{
	"query": {
		"terms": {
			"title": ["程序","性能"]
		}
	}
}
查询title字段中包含 “程序” 或者 “性能”的文档

三、range

range query 查询用于匹配在某一范围内的数值型、日期类型或者字符串类型字段的文档。range 查询只能查询一个字段,不能同时作用于多个字段。

range 查询支持的参数:
gt:大于
gte:大于等于
lt:小于
lte: 小于等于

{
	"query": {
		"range": {
			"price": {
				"gte": 50,
				"lte": 60
			}
		}
	}
}
查询价格字段的值大于等于50并且小于等于60的文档。

四、exists

exists 查询会返回字段中至少有一个非空值的文档。

{
    "exists": {
        "field": "user"
    }
}
查询存在user字段并且值不为空的文档。

以下文档会匹配上面的查询:
(1) {"user":"jane"}
(2) {"user":""}
(3) {"user":"-"}
(4) {"user":["jane"]}
(5) {"user":["jane",null]}

以下文档不会匹配上面的查询:
(1) {"user":null}
(2) {"user":[]}
(3) {"user":[null]}
(4) {"foo":"bar"} 没有user字段

五、prefix

prefix 查询用于查询某个字段的内容包含以查询字符串为前缀的关键词的文档。

{
	"query": {
		"prefix": {
			"title": "java"
		}
	}
}
查询 title字段中含有以java为前缀的关键词的文档

六、wildcard query

通配符查询,支持单字符通配符和多字符通配符。? 用来匹配一个任意字符;* 用来匹配另个或者多个字符。

七、regexp

正则表达式查询,查询字符串是一个正则表达式。

{
    "query" : {
                "regexp" : { "text(查询字段)" : "正则表达式" }  
            }
}

八、fuzzy query

fuzzy 查询是通过计算查询字符串与文档的编辑距离来得到结果,使用fuzzy需要小号的资源比较大,查询效率比高,适用于需要模糊查询的场景。

比如:用户在输入查询关键词的时候不小心把“javascript” 输成了 “javascritp”,使用fuzzy查询任然可以查询到含有“javascript”的文档。

编辑距离:是指两个字符串之间,有一个转成另一个所需要的最少编辑操作次数,也称为 Levenshtein 距离。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。

九、ids

ids 查询用于查询指定id的文档

{
	"query": {
		"ids": {
			"values": ["1","2","3"]
		}
	}
}
经验分享 程序员 微信小程序 职场和发展