ES 1查询

2020-08-13  本文已影响0人  吴国友

所有查询

GET /item/_search
{
  "query": {
    "match_all": {}
  }
}

匹配查询(match)

match类型查询,会把查询条件进行分词,然后进行查询,多个词条之间是or的关系

or关系

GET /item/_search
{
  "query": {
    "match": {
      "title": "SpringData Es2"
    }
  }
}

and关系

GET /item/_search
{
  "query": {
    "match": {
      "title": {
        "query": "SpringData Es2",
        "operator": "and"
      }
    }
  }
}

查询出来的信息

{
  "took": 0,//毫秒
  "timed_out": false,//是否超时
  "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
  },
  "hits": {//跟查询有关的信息
    "total": 1,//条数
    "max_score": 2.2548006,//文档得分
    "hits": [//满足条件的列表
      {
        "_index": "item",//索引
        "_type": "item",//文档类型
        "_id": "2",//id
        "_score": 2.2548006,//单条得分
        "_source": {//源数据
          "id": 2,
          "title": "SpringData Es2",
          "content": "今天我们使用SpringData ES完成Job搜索功能2"
        }
      }
    ]
  }
}

or和and之间关系

在or与and间二选一有点过于非黑即白。如果用户给定的条件分词有5个查询词项,想查找包含其中4个次的文档,改如何处理?将operator操作符设置成and只会将文档排除。

match查询支持minimum_should_match最小匹配参数,这让我们可以指定必须匹配的词项数用来表示一个文档是否相关。我们可以将其设置为某个具体数字,

GET /item/_search
{
  "query": {
    "match": {
      "title": {
        "query": "SpringData Es2",
        "minimum_should_match": "50%"
      }
    }
  }
}

搜索语句可以分为2个次,如果使用and关系 ,需要同时满足2个词才会被搜索到。这里我们采用最小匹配数50%,那么也就是说只要匹配到总次数量的50%计科,这里2*50%等于1。所以只要包含1个词条就算满足了。

多字段查询(multi_match)

multi_match与match类似,不同的是它可以在多个字段中查询

GET /item/_search
{
  "query": {
    "multi_match": {
      "query": "搜索功能99",
      "fields": ["title","content"]
    }
  }
}

多词条精确匹配(terms)

terms查询和term查询一样,但它允许你指定多值进行匹配。如果这个字段包含了知道你个值中的任何一个值,那么这个文档满足条件:

GET /item/_search
{
  "query": {
    "terms": {
      "content": [
        "ES",
        "搜索功能"
      ]
    }
  }
}
上一篇下一篇

猜你喜欢

热点阅读