2014-10-27 118 views
0

我有以下结构的文档值:查询与具有特殊字符

{ 
    "_index": "logstash-2014.10.08", 
    "_type": "iis", 
    "_id": "HRM7LWfBSPGo9PUS0Z1ynw", 
    "_score": 1, 
    "_source": { 
     "@version": "1", 
     "@timestamp": "2014-10-08T12:37:26.000Z", 
     "type": "iis", 
     "messageId": 
    "O5pUHWOuEnTT0xQxXfNW6L+O6EMIjTFO7e//t+S/99en4zzOnlhqjEKlw02ZZVRFlyVaawA==" 
    } 
} 

这里是我的映射:

 "messageId" : { 
     "type" : "string", 
     "norms" : { 
      "enabled" : false 
     }, 
     "fields" : { 
      "raw" : { 
      "type" : "string", 
      "index" : "not_analyzed", 
      "ignore_above" : 256 
      } 
     } 
     } 

我试图执行一个查询,我想仅返回具有在查询时传递的messageId的确切值的文档。我试图用匹配和过滤器来执行查询。

如果我使用来看,它返回零个文件:

{ 
    "query": { 
    "term" : { 
     "messageId" : 
     "O5pUHWOuEnTT0xQxXfNW6L+O6EMIjTFO7e//t+S/99en4zzOnlhqjEKlw02ZZVRFlyVaawA==" 
     } 
    } 
} 

当我使用的比赛,我可以让我的文档回来,但如果我做MESSAGEID变化不大,仍然会返回我的文档和邮件ID查询与文档不同。

{ 
    "query": { 
    "match" : { 
     "messageId" : 
      "O5pUHWOuxXfNW6L+O6EMIjTFO7e//t+S/99en4zzOnlhqjEKlw02ZZVRFlyVaawA==" 
     } 
    } 
} 

任何人都知道我该如何做一个查询并检索具有确切的messageId值的文档?

提前致谢。

+0

你可以添加cURL命令来重新创建它吗?我不认为您的映射正在索引时间应用。您可以尝试使用测试现场分析器来确保将其作为一个令牌进行索引。 – Andy 2014-10-27 18:14:10

+0

我使用Logstash将其编入索引。我如何使用现场分析仪? – placplacboom 2014-10-27 18:20:02

+0

我不熟悉Logstash的规范,你的索引是否自动配置?使用cURL命令测试现场分析器@ http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-analyze.html – Andy 2014-10-27 18:33:46

回答

0

我不认为这是一个特殊的人物问题,而是我认为它是一个指标分析与非分析问题。如果您使用常规分析字段,则需要以小写字母搜索所有内容以获得术语匹配。对于未分析的情况,情况并非如此。

我用你的样品进行了下面的测试,我能够得到你想要的结果。

PUT index1 

PUT index1/type1/_mapping 
{ 
    "type1": { 
    "properties": { 
     "raw" : { 
      "type" : "string", 
      "index" : "not_analyzed", 
      "ignore_above" : 256 
      } 
    } 
    } 
} 

POST index1/type1 
{ 
    "raw": "O5pUHWOuEnTT0xQxXfNW6L+O6EMIjTFO7e//t+S/99en4zzOnlhqjEKlw02ZZVRFlyVaawA==" 
} 

GET index1/type1/_search 
{ 
    "query": { 
    "term": { 
     "raw": { 
     "value": "O5pUHWOuEnTT0xQxXfNW6L+O6EMIjTFO7e//t+S/99en4zzOnlhqjEKlw02ZZVRFlyVaawA==" 
     } 
    } 
    } 
} 

我的猜测是分析了您正在处理的字段中的数据。你可以通过使用_mapping API来检查。在我的例子中,这将是:

GET index1/type1/_mapping