关于Elasticsearch Query中的Query DSL问题

来源:2-7 Elasticsearch查询简介

念念熙

2018-04-06 21:52

老师,为什么我搜索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回答

  • rockybean
    2018-04-08 11:19:53
    已采纳

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

    念念熙

    是的,我用match可以拿到想要的数据。谢谢老师的解答~

    2018-04-08 11:28:08

    共 1 条回复 >

  • rockybean
    2018-04-08 11:19:44

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

  • rockybean
    2018-04-07 12:51:59

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

    念念熙

    老师 请看第二条回答的内容,因为我直接回复贴代码会很难阅读,谢谢~

    2018-04-08 10:21:37

    共 1 条回复 >

  • 念念熙
    2018-04-08 10:20:21

    我通过命令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"
    }


Elastic Stack入门

Elasticsearch、Logstash、Beats、Kibana基础知识入门

32729 学习 · 76 问题

查看课程

相似问题