Elaticsearch第十篇 Es的文档的DSL搜索

1、新建索引shop

2、 建立映射 127.0.0.1:9200/shop/_mapping

{
    "properties": {
        "id": {
            "type": "long"
        },
        "age": {
            "type": "integer"
        },
        "username": {
            "type": "keyword"
        },
        "nickname": {
            "type": "text",
            "analyzer": "ik_max_word"
        },
        "money": {
            "type": "float"
        },
        "desc": {
            "type": "text",
            "analyzer": "ik_max_word"
        },
        "sex": {
            "type": "byte"
        },
        "birthday": {
            "type": "date"
        },
        "face": {
            "type": "text",
            "index": false
        }
    }
}

3、中文分词

4、添加数据

5、DSL搜索

a查询与多条件查询

/demeter_index/_search?q=nickname:马克波罗
/demeter_index/_search?q=nickname:马克波罗&q=age:20

b keyword与 text的区别

/demeter_index/_search?q=usename:super hero

结构化搜索 =》DSL搜索(domain specific language)

/demeter_index/_doc/_search

{
"query":{
    "match":{
        "desc":"马可波罗"
    }
}

}
{
    "query": {
        "match": {
            "username": "super hero"
        }
    }
}

等价于 /demeter_index/_search?q=username:super hero 要完全匹配,才能搜索的出来。

d 关键字exists

{
    "query": {
        "exists": {
            "field": "username"
        }
    }
}

 

e 查询所有

get方法 

/demeter_index/_doc/_search

 等价于 post方法  /demeter_index/_doc/_search

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

f 返回固定字段

/demeter_index/_doc/_search  post方法

{
    "query": {
        "match_all": {}
    },
    "_source": [
        "id",
        "nickname",
        "age"
    ]
}

---------------------

然后加一条数据

{
  "id": 1020,
  "age": 31,
  "username": "马克",
  "nickname": "大菠萝",
  "money": 188.8,
  "desc": "马可大学毕业了, 然后去国外留学",
  "sex": 1,
  "birthday": "1980-08-14",
  "face": "https://www.codedemeter.com/static/img/index/logo.png"
}

发现:

{
    "query": {
        "term": {
            "desc": "马可波罗"
        }
    }
}

是两条数据。类似图形化界面这样的两条

match就会有 三条。

多了一条,马可上大学,去国外了。

总结:term是代表完全匹配,也就是精确查询,搜索前不会再对搜索词进行分词,所以搜索必须是文档分词集合中的一个

match查询会对搜索词进行分词,只要搜索词的分词集合中的一个或多个存在与文档中就会被查询到

term相当于 精确匹配。

 match相当于text,分词之后,再去匹配。分词完毕之后再去搜索。 如下,就是会有马可的,波罗的,马可波罗的

{
    "query": {
        "match": {
            "desc": "马可波罗"
        }
    }
}

 

terms搜索

{
    "query": {
        "terms": {
            "desc": ["马可","波罗"]
        }
    }
}

 

 

参文章:https://blog.csdn.net/u012748043/article/details/106408366

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值