美文网首页
5.term,terms,match等基本查询语法

5.term,terms,match等基本查询语法

作者: DrinkwaterGor | 来源:发表于2020-02-19 17:54 被阅读0次

1.term terms

term terms 查询是不会介入分词器的, 对查询关键词作为整体查询, 不会拆分, 这种查询适合有明确值的字段

1)term:查询某个字段里含有某个关键词的文档

查找name字段中含有"张三"的文档

  "query":{
      "term":{
            "name":"张三"
          }
        }

2)terms : 查询某个字段里含有列出多个关键词中任一项的文档, 类似于SQL中in关键字的用法(或关系)

查找name字段中含有"张"或者"黄"的文档

  "query":{
      "terms":{
            "name":["张","黄"]
          }
        }

2.match

match查询会介入分词器,会对查询关键词和字段field进行分词匹配

1)match : 分词查询, 查询某个字段里含有关键词分词结果中一个或多个的文档

张五会被分词,所以name中含有张或者五的都会被检索到

  "query":{
      "term":{
            "name":"张五"
          }
        }

2)match all : 查询所有文档

  "query":{
      "match_all": {}  
  }

3)multi_match:可以指定查询多个field字段中含有查询关键词分词结果的文档

查询name或者memo中含有"张加"分词结果("张"或者"加")之一的

{
  "query": {
    "multi_match": {
      "query" : "张加",
      "fields":  ["name","memo"]
    }
  }
}

4)match_phrase : 对关键词分词分析,这意味着字段必须包含分词结果中的所有分词,并且保证各个分词的相对位置不变

查询name字段必须包含"张三"分词结果的查询结果, 假设"张三"分词结果中包含"张"和"张三"等,那么在name为"张某三"的文档中会因为没有张三这个分词结果而不被检索到

"query" : {
      "match_phrase":{
            "name":"张三"
          }
  }

附录
一个查询请求体例子

{
    "from": 0,
    "size": 10,
    "_source": ["age", "name", "memo"],
    "sort": [{
            "age": {
                "order": "asc"
            }
        },
        {
            "_score": {
                "order": "desc"
            }
        }
    ],
    "query": {
        "bool": {
            "must": {
                "match": {
                    "name": "张三"
                }
            },
            "filter": {
                "range": {
                    "age": {
                        "gte": 10,
                        "lte": 30
                    }
                }
            }
        }
    },
    "highlight": {
        "pre_tags": ["<tag1>"],
        "post_tags": ["</tag1>"],
        "fields": {
            "name": {}
        }
    }
}
image.png

相关文章

网友评论

      本文标题:5.term,terms,match等基本查询语法

      本文链接:https://www.haomeiwen.com/subject/urgafhtx.html