elasticsearch ElasticSearch没有';似乎不支持数组查找,elasticsearch,nest,elasticsearch,Nest" /> elasticsearch ElasticSearch没有';似乎不支持数组查找,elasticsearch,nest,elasticsearch,Nest" />

elasticsearch ElasticSearch没有';似乎不支持数组查找

elasticsearch ElasticSearch没有';似乎不支持数组查找,elasticsearch,nest,elasticsearch,Nest,我目前在ElasticSearch中存储了一个相当简单的文档,该文档是我通过集成测试生成的: { "took" : 1, "timed_out" : false, "_shards" : { "total" : 5, "successful" : 5, "failed" : 0 }, "hits" : { "total" : 1, "max_score" : 1.0, "hits" : [ { "_index" :

我目前在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"
  ]
}
    } ]
  }
}
我想筛选字段903和值“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在索引字段时使用标准分析器。标准分析器使用小写过滤器,如示例中所述。根据我的经验,Elasticsearch会搜索数组。

是的,我认为分析可能是罪魁祸首!想想这场比赛会有什么结果。如果是自由文本,则将其保留为分析字符串,并使用
匹配
查询(而不是
术语
)。如果它是一个类似枚举的字段,例如:open/closed/pending…,则使用
“index”:“not_analysis”
,并确保使用
术语
过滤器搜索确切的字符串。啊,我不知道这一点。你说得对,斯科特!谢谢你让我注意到这一点。在数组中搜索没有问题,这是另外一回事。另外,请告诉我这些不是字段名!名字应该告诉你一些关于这个领域的事情,一个新加入的开发人员怎么能理解这个呢?@ramseykhalaf:我想有人会这么说。这些字段实际上是从数据库生成的自定义字段名,因为软件用户可以自定义存储的字段。开发人员永远不会对此编写查询;查询将由软件自动生成。我想你可能会说,我们可以为字段生成一个名称,以某种方式同时包含主键和字段名,但我觉得这不是必要的,而且可能很脆弱。