簡體   English   中英

Elasticsearch:如何使用OR條件查詢數組字段?

[英]Elasticsearch: How to query an array field using OR condition?

我有一些ElasticSearch文檔,其中包含一個Array字段。

我希望能夠搜索整個索引
要查找首先包含數組字段的文檔,
如果有,請查找包含要搜索的值的那些文檔。

以下是我的數據-

{
  "took" : 633,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 4,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "demo",
        "_type" : "1",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "name" : "anon",
          "nick_name" : "an",
          "hobbies" : [
            "reading",
            "writing"
          ]
        }
      },
      {
        "_index" : "demo",
        "_type" : "1",
        "_id" : "2",
        "_score" : 1.0,
        "_source" : {
          "name" : "anon2",
          "nick_name" : "an2",
          "hobbies" : [
            "playing",
            "studying"
          ]
        }
      },
      {
        "_index" : "demo",
        "_type" : "1",
        "_id" : "3",
        "_score" : 1.0,
        "_source" : {
          "name" : "anon3",
          "nick_name" : "an3",
          "hobbies" : [
            "playing",
            "writing"
          ]
        }
      },
      {
        "_index" : "demo",
        "_type" : "1",
        "_id" : "4",
        "_score" : 1.0,
        "_source" : {
          "name" : "anon4",
          "nick_name" : "an4"
        }
      }
    ]
  }
}

我想獲取那些其興趣愛好數組包含“正在播放”或“正在學習”值的文檔
即。 文件2和3

以下是我的數據創建查詢-

POST /demo/_doc/1
{
  "name":"anon",
  "nick_name":"an",
  "hobbies":["reading","writing"]
}

POST /demo/_doc/2
{
  "name":"anon2",
  "nick_name":"an2",
  "hobbies":["playing","studying"]
}

POST /demo/_doc/3
{
  "name":"anon3",
  "nick_name":"an3",
  "hobbies":["playing","writing"]
}

POST /demo/_doc/4
{
  "name":"anon4",
  "nick_name":"an4"
}

GET demo/_search
{
  "query": {
    "match_all": {}
  }
}

以下查詢可以讓我進行一次搜索,但是如何實現“或”條件?

GET demo/_search
{
  "query": {
    "match": {
      "hobbies": "playing"
    }
  }
}

我現在無法測試,但是可能是這樣的:

GET demo/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "terms": {
            "hobbies": [
              "playing",
              "studying"
            ]
          }
        }
      ]
    }
  }
}

如果您的hobbies字段的類型為keyword

編輯:按照文檔中的示例進行操作,可能會更加容易:

GET demo/_search
{
    "query" : {
        "terms" : {
            "hobbies" : ["playing", "studying"]
        }
    }
}

我可以使用以下es查詢解決此問題-

GET demo/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "hobbies": "playing"
          }
        },
        {
          "match": {
            "hobbies": "studying"
          }
        }
      ]
    }
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM