elasticsearch

ElasticSearch(三):SearchAPI

2018-11-21  本文已影响58人  采风JS

一 字段类查询

字段类查询包括全文匹配和单词匹配,全文匹配针对text类型的字段进行全文检索,会对查询语句做分词,如match/match_phrase等query类型;

##通过operator参数可以控制单词间匹配关系,选项为or和and
##默认为or,查询username中包含alfred或者way的文档
GET test_search_index/_search
{
  "explain":true,
  "query": {
    "match": {
      "username": "alfred way"
    }
  }
}
##and,查询username中同时包含alfred和way的文档
GET test_search_index/_search
{
  "query": {
    "match": {
      "username": {
        "query": "alfred way",
        "operator": "and"
      }
    }
  }
}
##通过minimum_should_match控制需要匹配的单词数
GET test_search_index/_search
{
  "query": {
    "match": {
      "job": {
        "query": "java ruby engineer",
        "minimum_should_match": "3"
      }
    }
  }
}
GET test_search_index/_search
{
  "query": {
    "match_phrase": {
      "job": "java engineer"
    }
  }
}
##job字段中包含java word word engineer形式
GET test_search_index/_search
{
  "query": {
    "match_phrase": {
      "job": {
        "query": "java engineer",
        "slop": "2"
      }
    }
  }
}
##username中同时包含alfred和way
GET test_search_index/_search
{
  "profile":true,
  "query":{
    "query_string": {
      "default_field": "username",
      "query": "alfred AND way"
    }
  }
}
##username和job字段中包含alfred或者同时包含java和ruby
GET test_search_index/_search
{
  "profile":true,
  "query": {
    "query_string": {
      "fields": [
        "username",
        "job"
      ],
      "query": "alfred OR (java AND ruby)"
    }
  }
}
GET test_search_index/_search
{
  "profile":true,
  "query":{
    "simple_query_string": {
     "query": "alfred +way \"java",
     "fields": ["username"]
    }
  }
}

单词匹配不做分词,直接匹配字段倒排索引,如term/terms/range等query类型;

GET test_search_index/_search
{
  "query":{
    "term":{
      "username":"alfred way"
    }
  }
}
GET test_search_index/_search
{
  "query": {
    "terms": {
      "username": [
        "alfred",
        "way"
      ]
    }
  }
}
GET test_search_index/_search
{
  "query":{
    "range": {
      "age": {
        "gte": 10,
        "lte": 30
      }
    }
  }
}
GET test_search_index/_search
{
  "query":{
    "range": {
      "birth": {
        "gte": "now-30y"
      }
    }
  }
}

二 复合查询

复合查询是指包含字段类查询或复合查询类型;

GET test_search_index/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "username": "alfred"
          }
        }
      ]
    }
  }
}
##username中必须包含alfred,job中必须包含specialist
GET test_search_index/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "username": "alfred"
          }
        },
        {
          "match": {
            "job": "specialist"
          }
        }
      ]
    }
  }
}
GET test_search_index/_search
{
  "query": {
    "bool": {
      "should": [
        {"term": {"job": "java"}},
        {"term": {"job": "ruby"}},
        {"term": {"job": "specialist"}}
      ],
      "minimum_should_match": 2
    }
  }
}
GET test_search_index/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "username": "alfred"
          }
        }
      ],
      "should": [
        {
          "term": {
            "job": "ruby"
          }
        }
      ]
    }
  }
}
GET test_search_index/_count
{
  "query":{
    "match":{
      "username": "alfred"
    }
  }
}
GET test_search_index/_search
{
  "_source": ["username","age"]
}
上一篇下一篇

猜你喜欢

热点阅读