2

我目前在 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 文档表明字符串或数组映射之间没有区别,因此我认为我不需要在此处进行任何更改。

4

1 回答 1

5

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

于 2013-08-18T02:10:53.020 回答