代码之家  ›  专栏  ›  技术社区  ›  Aviran

筛选ID值

  •  0
  • Aviran  · 技术社区  · 6 年前

    我在使用ID值筛选字段时遇到了一个问题,不确定这是如何发生的,下面是映射和一个示例。

    添加新用户后可以看到 primary_user 设置为 AWBFyulclsp0PJbvPiuB 使用将找不到它 filter 除非 keyword 在筛选器请求中使用。 这只会发生在ID的值上。 这种行为的根本原因是什么?

       GET users/_mapping/
    
        Response:
        {
         ...
         ...
         "primary_user": {
                    "type": "text",
                    "fields": {
                      "keyword": {
                        "type": "keyword",
                        "ignore_above": 256
                      }
                    }
                  }
        }
    ------
        POST users/user
        {
          "primary_user": "AWBFyulclsp0PJbvPiuB"
        }
    
        Response:
        {
          "_index": "users",
          "_type": "user",
          "_id": "AWIaOFgQmedTIIkbtGPG",
          "_version": 1,
          "result": "created",
          "_shards": {
            "total": 2,
            "successful": 1,
            "failed": 0
          },
          "created": true
        }
    ------
        GET users/user/_search
        {
          "query": {
            "bool": {
              "filter": {
                "term": {
                  "primary_user": "AWBFyulclsp0PJbvPiuB"
                }
              }
            }
          }
        }
        Response:
        {
          "took": 0,
          "timed_out": false,
          "_shards": {
            "total": 5,
            "successful": 5,
            "failed": 0
          },
          "hits": {
            "total": 0,
            "max_score": null,
            "hits": []
          }
    }
    ------
        GET users/user/_search
        {
          "query": {
            "bool": {
              "filter": {
                "term": {
                  "primary_user.keyword": "AWBFyulclsp0PJbvPiuB"
                }
              }
            }
          }
        }
    
        Response:
        {
            "_index": "users",
            "_type": "user",
            "_id": "AWIaOFgQmedTIIkbtGPG",
            "_score": 0,
            "_source": {
              "primary_user": "AWBFyulclsp0PJbvPiuB"
            }
          }
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Lupanoide    6 年前

    因为 primary_user 具有文本数据类型,如映射中所述:

     "primary_user": {
                "type": "text",
                "fields": {
                  "keyword": {
                    "type": "keyword",
                    "ignore_above": 256
                  }
                }
              }
    

    So或更改要查询的字段:

    GET users/user/_search
    {
      "query": {
        "bool": {
          "filter": {
            "term": {
              "primary_user.keyword": "AWBFyulclsp0PJbvPiuB"
            }
          }
        }
      }
    }
    

    或从术语更改为匹配查询:

    GET users/user/_search
    {
      "query": {
        "bool": {
          "filter": {
            "match": {
              "primary_user": "AWBFyulclsp0PJbvPiuB"
            }
          }
        }
      }
    }