ElasticSearch似乎不支持数组查找

时间:2013-08-17 23:05:05

标签: 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"
  ]
}
    } ]
  }
}

我想特别过滤field903和" Open"的值,所以我执行以下查询:

{
    query: {
        filtered: {
            filter: {
                term: {
                    field903: "Open",
                }
            }
        }
    }
}

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

{
    query: {
        filtered: {
            filter: {
                term: {
                    field901: "500",
                }
            }
        }
    }
}

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

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

{
  "unit-test_project600" : {
    "recordDefinition505" : {
      "properties" : {
        "field900" : {
          "type" : "string"
        },
        "field901" : {
          "type" : "string"
        },
        "field902" : {
          "type" : "date",
          "format" : "dateOptionalTime"
        },
        "field903" : {
          "type" : "string"
        }
      }
    }
  }
}

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

1 个答案:

答案 0 :(得分:5)

尝试搜索“打开”而不是“打开”。默认情况下,Elasticsearch在索引字段时使用标准分析器。标准分析器使用小写过滤器,如示例here中所述。根据我的经验,Elasticsearch会搜索数组。