2017-08-03 95 views
0

我是elasticsearch的新手。我使用的版本是5.4.3,除日期范围查询外,一切正常。它返回所有条目。Elasticsearch日期范围问题

{ 
     "from": 0, 
     "query": { 
        "bool": { 
        "must": [ 
         { 
         "term": { 
          "qualities.qualityId": { 
          "value": 110137 
          } 
         } 
         }, 
         { 
         "range": { 
          "qualities.value": { 
          "gte": "01/01/1950", 
          "lte": "12/12/1999", 
          "format": "dd/MM/yyyy" 
          } 
         } 
         } 
        ] 
        } 
       } 
     } 

Result

但具体日期1945年2月11日低于1950年1月1日。 它看起来很奇怪。在我的项目,我使用Elasticsearch.Net V5.4

Mapping

+0

请显示您的映射,我认为您的对象在质量不嵌套。 – MartinSchulze

+0

@martinschulze http:// ***/person_search_index/_mapping返回“验证失败:1:映射类型丢失;”。这是原因吗?我该如何解决它? – OldUnion

+0

它的http:// ***/person_search_index/person_search_type/_mapping – MartinSchulze

回答

0

elasticsearch将压扁你的素质数组字段名称和值的简单列表的问题,所以你不能查询的品质为对象本身。解决方案是使用质量对象的嵌套数据类型(https://www.elastic.co/guide/en/elasticsearch/reference/current/nested.html)。然后你的查询应该按预期工作。

+0

我可以更改类型嵌套而不会丢失我的数据吗? – OldUnion

+0

您必须在创建索引时创建映射。然后,您可以将数据重新编入新索引。我假设你正在使用elasticsearch的自动生成的映射功能。这对于快速入门非常有用,但您必须随着时间的推移优化您的映射。 – MartinSchulze

0

由于映射中的value属性,过滤器无法正常工作。这里的value属性声明为text,但它应该是date数据类型。

更改您的贴图,如下所示,并尝试。

"value" : { 
    "type": "date" 
} 
+0

和我必须用字符串类型的其他“值”做什么? – OldUnion

+0

你可以有两个字段作为值而不是一个:''value_text“:{”type“:”text“,”value_date“:{”type“:”date“}'。在'Екатерина'的情况下,您应该将它放在'value_text'中并将'value_date'保留为空;在'01/01/1950'的情况下,您应该将其放在'value_date'中,并将'value_text'保留为空。另请注意关于[嵌套]的另一个回复(https://www.elastic.co/guide/en/elasticsearch/reference/current/nested.html)字段。 –