1 数据准备
1.1 创建索引库
新建一个测试索引库 search_demo

1.2 设置索引的 mapping
结构
POST /search_demo/_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
}
}
}
1.3 文档数据
CSDN下载地址: https://download.csdn.net/download/qq_15769939/15577363
1.4 自定义中文分词
详细可查看文档 https://blog.csdn.net/qq_15769939/article/details/114435973
配置分词器
[root@localhost config]# vi /usr/local/elasticsearch-7.4.2/plugins/ik/config/custom.dic
好的
好
的
重启es服务
[root@localhost config]# /usr/local/elasticsearch-7.4.2/bin/elasticsearch -d
2 搜索
2.1 普通参数查询
普通查询可以称为 QueryString
查询方式,参数放在url中作为请求参数。
查询 字段
包含 内容
的文档
GET /search_demo/_doc/_search?q=desc:test
2.2 DSL查询
QueryString
用的很少,一旦参数复杂就难以构建,所以大多查询都会使用DSL来进行查询。
- Domain Specific Language
- 特定领域语言
- 基于JSON格式的数据查询
- 查询更灵活,有利于复杂查询
查询统一请求路径
POST /search_demo/_doc/_search
2.2.1 查询指定字段
传递JSON数据
{
"query": {
"match": {
"desc": "项目"
}
}
}
请求结果
{
"took": 16,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 1.4514983,
"hits": [
{
"_index": "search_demo",
"_type": "_doc",
"_id": "1001",
"_score": 1.4514983,
"_source": {
"id": 1001,
"age": 18,
"username": "Tic",
"nickname": "飞翔的荷兰号",
"money": 88.8,
"desc": "我在p2pi网站解决项目中遇到的问题,学习到了很多知识",
"sex": 0,
"birthday": "1992-12-24",
"face": "http://www.p2pi.cn/static/img/1001_face.png"
}
}
]
}
}
2.2.2 判断某个字段是否存在
传递JSON数据
{
"query": {
"exists": {
"field": "test"
}
}
}
请求结果
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 0,
"relation": "eq"
},
"max_score": null,
"hits": []
}
}
- 语法格式为一个json Object,内容都是key-value键值对,json可以循环嵌套
- key可以是一些es的关键字,也可以是某个field字段
2.2.3 问题定位
DSL查询过程中检查会出现一些错误查询,出现这样的问题大多数都是json无法被es解析,es会报异常信息返回,可以根据异常信息去判断问题所在,比如json格式不对,关键字不存在,未注册等等。
例子:
{
"query2": {
"exists": {
"field": "test"
}
}
}
请求结果
{
"error": {
"root_cause": [
{
"type": "parsing_exception",
"reason": "Unknown key for a START_OBJECT in [query2].",
"line": 2,
"col": 15
}
],
"type": "parsing_exception",
"reason": "Unknown key for a START_OBJECT in [query2].",
"line": 2,
"col": 15
},
"status": 400
}
3 相关信息
- 博文不易,辛苦各位猿友点个关注和赞,感谢
网友评论