match_all
它不包含任何条件,通常用于返回索引中的所有文档
GET /index/_search
{
"query":{
"match_all":{}
}
}
match
用于执行全文本搜索。它可以对文本字段进行模糊匹配,支持分词器处理后的词项匹配
GET /index/_search
{
"query":{
"match":{
"field_name":{
"query":"search words", // 搜索匹配词
"operator":"or", // 控制多个词项之间的逻辑关系。可选值为 or(默认)和 and
"analyzer": "standard", // 指定在查询时使用的分析器。如果未指定,默认使用字段的映射定义中的分析器。
"minimum_should_match": "50%" // 控制匹配的最小词项数量。可以是绝对数量或百分比。
}
}
}
}
match_phrase
用于执行短语匹配查询。与普通的 match 查询不同,match_phrase 查询要求匹配的词项必须按指定的顺序出现,并且中间不能有其他词项。这使得 match_phrase 查询非常适合用于精确匹配短语
GET /index/_search
{
"query":{
"match_phrase":{
"field_name":{
"query":"search words", // 搜索匹配词
"analyzer": "standard", // 指定在查询时使用的分析器。如果未指定,默认使用字段的映射定义中的分析器。
"slop": 1 // 控制允许的词项之间的间隔。默认值为 0,表示词项必须紧挨着出现 (注:索引和搜索项使用不同的分词器可能会产生不同的词项,导致无法匹配)
}
}
}
}
multi_match
查询可以在多个字段中进行搜索,返回包含匹配内容的文档
GET /index/_search
{
"query":{
"multi_match": {
"query": "search words", // 搜索匹配词
"fields": ["field1", "field2"], // 要搜索的字段列表
"type": "best_fields" // 匹配类型 可选值包括 best_fields(默认)、most_fields、cross_fields 和 phrase
}
}
}
best_fields: 默认类型。尝试在单个字段中找到最佳匹配。如果某个字段中的匹配度最高,则该字段的得分会被用作最终得分
most_fields: 尝试在多个字段中找到匹配,并将所有匹配字段的得分相加
cross_fields: 将所有字段视为一个整体进行匹配。适合字段之间有相似内容的情况
phrase: 要求匹配的词项按顺序出现,形成一个短语
term
用于精确查询,不进行分词处理,而是直接匹配字段中的完整值(包括大小写和空格)适用于 keyword 类型的字段
GET /index/_search
{
"query":{
"term": {
"field_name": {
"value":"search words" // 搜索匹配词
}
}
}
}
注:
- 如果 term 匹配的字段为 text 类型,可以使用
field_name.keyword
进行搜索 - term 处理多值字段(数组)时,查询是包含不是等于
terms
主要用于多值精确匹配,terms 查询在需要查找包含多个特定值的文档时非常有用,常用于过滤和聚合操作
GET /index/_search
{
"query":{
"terms": {
"field_name": ["search word1","search word2"], // 多个搜索匹配词
"minimum_should_match": 2 // 指定至少需要匹配的值的数量或比例
}
}
}
terms_set
用于处理多值字段(如数组字段),并允许你根据字段中值的数量来动态地应用查询条件
GET /index/_search
{
"query": {
"terms_set": {
"field_name": {
"terms": [ "value1", "value2", ... ],
"minimum_should_match": 1, // 固定的最小匹配值 整数或字符串(百分比)
"minimum_should_match_field": "min_match_field", // 指定一个字段,该字段的值将用作 minimum_should_match 的阈值
"minimum_should_match_script": {
"source": "params.num_terms * params.percent / 100" // 使用脚本来动态计算 minimum_should_match 的值 params.num_terms: terms 列表中的值数量 params.percent: 可以在脚本中使用的百分比值
}
}
}
}
}
range
用于查找在指定范围内的文档的查询类型。它可以用于数值、日期、字符串等多种数据类型的字段
GET /index/_search
{
"query":{
"range": {
"field_name":{
"gte": 10,
"lte": 20
}
}
}
}
exists
查找包含特定字段的文档的查询类型。它不关心字段的具体值,只检查字段是否存在
GET /index/_search
{
"query":{
"exists": {
"field":"field"
}
}
}
fuzzy
用于执行模糊搜索的查询类型。它允许用户在搜索时容忍一定的拼写错误,从而找到与查询词相似的文档
GET /index/_search
{
"query":{
"fuzzy": {
"field_name":"search words"
}
}
}
bool query 组合搜索
用于组合多个查询条件,以实现复杂的搜索逻辑
GET /index/_search
{
"query": {
"bool": {
"must": [ /* 必须满足的所有查询条件 */ ],
"should": [ /* 至少满足一个的查询条件 */ ], (minimum_should_match 指定 should 条件中至少需要满足的条件数量)
"must_not": [ /* 必须不满足的所有查询条件 */ ],
"filter": [ /* 过滤条件,不影响评分 */ ]
}
}
}
标签:总结,search,匹配,查询,field,搜索,query,elasticsearch,match
From: https://www.cnblogs.com/xingzr/p/18529208