为了账号安全,请及时绑定邮箱和手机立即绑定

关于Elasticsearch Query中的Query DSL问题

老师,为什么我搜索name的值为大写开头的时候,返回的是这样的结果呢?

GET accounts/person/_search
{
  "query": {
    "term": {
      "name": {
        "value": "John"
      }
    }
  }
}
{
  "took": 2,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 0,
    "max_score": null,
    "hits": []
  }
}

把name的值改成小写开头的时候就能正确返回结果。

正在回答

4 回答

哦,你用的是term查询,是直接拿着这个term去匹配的,但是默认分词结果是小写的,所以会无法匹配,你用match就可以了

0 回复 有任何疑惑可以回复我~
#1

念念熙 提问者

是的,我用match可以拿到想要的数据。谢谢老师的解答~
2018-04-08 回复 有任何疑惑可以回复我~

哦,你用的是term查询,是直接拿着这个term去匹配的,但是默认分词结果是小写的,所以会无法匹配,你用match就可以了

0 回复 有任何疑惑可以回复我~

你的 mapping 设置是什么?具体文档是什么?

0 回复 有任何疑惑可以回复我~
#1

念念熙 提问者

老师 请看第二条回答的内容,因为我直接回复贴代码会很难阅读,谢谢~
2018-04-08 回复 有任何疑惑可以回复我~

我通过命令GET /accounts/person/_mapping?pretty 查看mapping得到的是

{
  "accounts": {
    "mappings": {
      "person": {
        "properties": {
          "job_description": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "lastname": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "name": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          }
        }
      }
    }
  }
}

具体文档是不是指我建立的index和type的内容呢?

POST /accounts/person/1
{
  "name": "John",
  "lastname": "Doe",
  "job_description": "Systems administrator and Linux specialit"
}

POST /accounts/person/2
{
  "name": "Alfred",
  "lastname": "Way",
  "job_description": "teacher"
}


0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

关于Elasticsearch Query中的Query DSL问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信