ElasticSearch filter查询

学习查询之前,我还是老规矩,先准备数据

#Filter查询
#filter是不计算相关性的,同时可以cache.因此,filter速度要快于query.
POST /lib5/items/_bulk
{"index":{"_id": 1}}
{"price": 40,"itemID": "ID100123"}
{"index":{"_id": 2}}
{"price": 50,"itemID": "ID100124"}
{"index":{"_id": 3}}
{"price": 25,"itemID": "ID100124"}
{"index":{"_id": 4}}
{"price": 30,"itemID": "ID100125"}
{"index":{"_id":5}}
{"price": null, "itemID": "ID100127"}

查询价格为40的(过滤价格为40的数据)

查询价格25和40的

 注意:

我们post请求添加数据我用的是动态映射,自动创建的mapping,我们可以看下mapping

注意:我们看见了itemID是text类型 ,而text类型默认是进行分词的,分词的时候会将  "ID100123"  大写的字母转化成小写字母  "id100123"

我们将改成小写的试试,发现是ok的     如下图所示:         

查询语句:

####2.8.1简单的过滤查询
#term
GET /lib5/items/_search
{ 
  "post_filter":{
    "term":{ "price":40}
  }
} 

#terms
GET /lib5/items/_search
{
  "post_filter":{
    "terms":{ "price": [25,40]}
  }  
}

GET /lib5/items/_search
{
  "post_filter":{
    "term": { "itemID": "ID100123"}
  } 
}
GET /lib5/items/_search
{
  "query": {
    "bool": {
      "filter": [{ "term": { "price": 40}}]
    }
  }
}

GET /lib5/items/_search
{
  "query": {
    "bool": {
      "filter": [{ 
        "terms": { "price": [25,40] }
      }]
    }
  }
}

GET /lib5/items/_search
{
  "query": {
    "bool": {
      "filter": [{
        "term": { "itemID":"5100123" }
      }]
    }
  }
}
发布了298 篇原创文章 · 获赞 107 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/ywl470812087/article/details/105013351