ElasticSearch似乎不支持数组查找

Ste*_*uts 2 elasticsearch nest

我目前有一个存储在ElasticSearch中的相当简单的文档,我使用集成测试生成:

{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 1.0,
    "hits" : [ {
      "_index" : "unit-test_project600",
      "_type" : "recordDefinition505",
      "_id" : "400",
      "_score" : 1.0, "_source" : {
  "field900": "test string",
  "field901": "500",
  "field902": "2050-01-01T00:00:00",
  "field903": [
    "Open"
  ]
}
    } ]
  }
}
Run Code Online (Sandbox Code Playgroud)

我想特别筛选field903和值"Open",所以我执行以下查询:

{
    query: {
        filtered: {
            filter: {
                term: {
                    field903: "Open",
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这不会返回任何结果.但是,我可以将其与其他字段一起使用,它将返回记录:

{
    query: {
        filtered: {
            filter: {
                term: {
                    field901: "500",
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

看来我无法使用ElasticSearch搜索数组.我已经阅读了一些有类似问题的人的实例,但他们似乎都没有解决它.当然这不是ElasticSearch的限制吗?

我认为这可能是一个映射问题.这是我的映射:

{
  "unit-test_project600" : {
    "recordDefinition505" : {
      "properties" : {
        "field900" : {
          "type" : "string"
        },
        "field901" : {
          "type" : "string"
        },
        "field902" : {
          "type" : "date",
          "format" : "dateOptionalTime"
        },
        "field903" : {
          "type" : "string"
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,ElasticSearch文档表明字符串或数组映射之间没有区别,所以我认为我不需要在此处进行任何更改.

Sco*_*ice 5

尝试搜索"打开"而不是"打开".默认情况下,Elasticsearch在索引字段时使用标准分析器.标准分析仪使用小写过滤器,如在实施例中描述在这里.根据我的经验,Elasticsearch会搜索数组.

  • 是的,我认为分析可能是罪魁祸首!想想这个领域会持有什么.如果是自由文本,则将其保留为分析字符串并使用`match`查询(不是`term`).如果它是类似enum的字段,例如:open/closed/pending ...,则使用`"index":"not_analyzed"`和**确保**使用a搜索**exact**字符串`term`过滤器. (2认同)