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