沙师弟,师父的充电器掉了

es使用match匹配不到文档

Elasticsearch | 作者 Slient | 发布于2021年05月14日 | 阅读数:1415

最近开始学es,发现使用match无法匹配文档,请大佬们帮忙看一下。
我想匹配张三或李四的文档,但是匹配不到。但是如果只匹配张三或只匹配李四,就能匹配到。
弄了快两天了一直没弄明白问题在哪。
 
es的版本是6.8
无结构索引创建语句:
PUT /haoke
{
"settings": {
"index": {
"number_of_shards": "2",
"number_of_replicas": "0"
}
}
}
数据插入语句:
POST /haoke/user/1001
{
"id": 1001,
"name": "张三",
"age": 20,
"sex": "男"
}


POST /haoke/user/
{
"id": 1002,
"name": "李四",
"age": 21,
"sex": "男"
}
查询语句:
POST /haoke/user/_search
{
"query": {
"match": {
"name": "张三 李四"
}
}
}
1.png 2.png 3.png 4.png 5.png
已邀请:

thewind

赞同来自: Slient

`match` 查询,用于匹配`text`数据类型的字段,解决问题的方式有两种: 
 
 
1. 将 `name`字段修改为 `text`数据类型
# 修改mappings

PUT haoke/
{
"mappings": {
"properties": {
"name": {
"type": "text"
}
}
}
}

GET haoke/_search
{
"query": {
"match": {
"name": "张三 李四"
}
}
}


2. 查询类型修改为 `terms`查询
 
PUT haoke/
{
"mappings": {
"properties": {
"name": {
"type": "keyword"
}
}
}
}

# 使用 terms查询
GET haoke/_search
{
"query": {
"terms": {
"name": [
"张三",
"李四"
]
}
}
}

要回复问题请先登录注册