一、query string search
A、搜索全部商品
GET /ecommerce/_search
B、 查询商品名为牙膏,价格降序排列
GET /ecommerce/_search?q=name:yagao&sort=price:desc
二、 query DSL
A、 查询所有商品
GET /ecommerce/_search
{
"query": {
"match_all": {}
}
}
B、 查询所有名称包含yagao的商品,同时按照价格降序排列
GET /ecommerce/_search
{
"query": {
"match": {
"name": "yagao"
}
},
"sort": [
{
"price": {
"order": "desc"
}
}
]
}
三、 分页
A、GET /ecommerce/_search
{
"query": {
"match_all": {}
},
"from": 0,
"size": 2
}
四、 查询指定字段
A、GET /ecommerce/_search
{
"query": {
"match_all": {}
},
"_source": ["name","desc","price"]
}
五、 query filter
A、搜索商品名称包含牙膏且售价大于25的
GET /ecommerce/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"name": "yagao"
}
}
],
"filter": {
"range": {
"price": {
"gte": 25
}
}
}
}
}
}
六、 full-text search
A、GET /ecommerce/_search
{
"query": {
"match": {
"producer": "yagao producer"
}
}
}
七、 phrase search
A、GET /ecommerce/_search
{
"query": {
"match_phrase": {
"producer": "yagao producer"
}
}
}
八、 hightlight search
A、GET /ecommerce/_search
{
"query": {
"match": {
"producer": "producer"
}
},
"highlight": {
"fields": {
"producer": {}
}
}
}
九、组合多个搜索条件
A、bool查询
GET /article/_search
{
"query": {
"bool": {
"must": [
{
"bool": {
"should": [
{
"match": {
"title": "hadoop"
}
},
{
"match": {
"author_id": "111"
}
}
]
}
}
],
"should": [
{
"match": {
"content": "elasticsearch"
}
}
],
"minimum_should_match": 4
}
}
}
十、multimatch
GET /article/_search
{
"query": {
"multi_match": {
"query": "elasticsearch",
"fields": ["title","content"]
}
}
}
十一、term query
A、和match_phrase区别
term不会分词,是直接拿去查,而match_phrase会分词然后再去匹配,要求文档包含这些分词且顺序一致。所以使用term要确保字段类型是keyword或者会有这个分词。
十二、单纯使用过滤
GET /article/_search
{
"query": {
"constant_score": {
"filter": {
"range": {
"FIELD": {
"gte": 10,
"lte": 20
}
}
},
"boost": 1.2
}
}
}
十三、将一个field索引两次解决字符串排序问题
如果对一个字符串进行排序,结果往往不准确,因为分词后是多个单词,再排序就不是我们想要的结果了。通常是将一个string field建立两次索引,一个分词,一个进行搜索;一个部分词,用来进行排序。