elasticsearch - 在Elasticsearch中搜索对象数组

标签 elasticsearch

我正在使用elasticsearch-6.4.3

我使用以下映射创建了索引test_index:

PUT test_index
{
  "mappings": {
    "_doc": {
      "properties": {
        "name": {
          "type": "keyword"
        },
        "segments": {
          "type": "nested",
          "properties": {
            "f1": {
              "type": "keyword"
            },
            "f2": {
              "type": "integer"
            }
          }
        }
      }
    }
  }
}

我使用以下命令在索引中插入了一个文档:
POST /test_index/_doc
{
  "name": "ABC",
  "segments": [{
    "f1": "abc",
    "f2": 123
  }, 
  {
    "f1": "def",
    "f2": 124
  }]
}

我有一组值说arr = ["def", "xyz"]。我想将所有f1 field in segments field中至少一个匹配的文档与给定数组arr中的任何值进行匹配。

您可以将其称为array_intersect之类的名称,以便于理解。

我正在尝试这样的事情:
GET /test_index/_search
{
"query": {
    "nested": {
      "path": "segments",
      "query": {
        "bool": {
          "must": [
            {
              "terms": {
                "f1": [ 
                  "def",
                  "xyz"
                ]
              }
            }
          ]
        }
      }
    }
  }
}

我没有得到任何结果作为输出。Expected output:文档应该匹配,因为文档中f1的值存在“def”。

最佳答案

您需要在术语查询中将完整路径指定为segments.f1而不是nested queryf1

修改查询,如下所示:

POST test_index/_search
{ 
   "query":{ 
      "nested":{ 
         "path":"segments",
         "query":{ 
            "bool":{ 
               "must":[ 
                  { 
                     "terms": {
                       "segments.f1": ["def","xyz"]    <---- Mention full path here

                     }
                  }
               ]
            }
         }
      }
   }
}

希望这可以帮助!

关于elasticsearch - 在Elasticsearch中搜索对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58321975/

相关文章:

elasticsearch - 根据上次索引时间在查询时间提升 Elasticsearch 结果

java - 模拟 final方法的空指针异常

elasticsearch - 有什么方法可以对 Elasticsearch 中的文本中的数字禁用模糊搜索?

elasticsearch - 设置编解码器/在Elasticsearch中搜索Python中的unicode值

mysql - 检查给定句子(查询)是否包含任何预定义关键字的最佳方法

elasticsearch - Search Guard Kibana clientcert 身份验证

java - 如何从 Java 应用程序连接到 Heroku 上的 Bonsai ElasticSearch

java - 使用maven在java应用程序中运行两个版本的elasticsearch

elasticsearch - 查找没有别名的 elasticsearch 索引

elasticsearch - 如何在Elasticsearch-6.4.0.jar中使用Count API获取匹配数据的数量