我有一份文件如下:
{
"_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的确切值的文档。我尝试使用匹配和过滤器执行查询。
如果我使用term,则返回零文档:
{
"query": {
"term" : {
"messageId" :
"O5pUHWOuEnTT0xQxXfNW6L+O6EMIjTFO7e//t+S/99en4zzOnlhqjEKlw02ZZVRFlyVaawA=="
}
}
}
当我使用匹配时,我可以返回我的文档,但是如果我对messageId做了很少的更改,它仍会返回我的文档,查询中的messageId与文档不同。
{
"query": {
"match" : {
"messageId" :
"O5pUHWOuxXfNW6L+O6EMIjTFO7e//t+S/99en4zzOnlhqjEKlw02ZZVRFlyVaawA=="
}
}
}
任何人都知道如何进行查询并检索具有messageId精确值的文档?
提前感谢。
答案 0 :(得分: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