2014-10-27 3 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, которое передается по запросу. Я попытался выполнить запросы, используя match и filter.

Если я использую термин, он возвращает ноль документы:

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

Когда я использовать матч, я могу получить документ обратно, но если я сделать небольшие изменения на MESSAGEID, она по-прежнему возвращает свой документ и MESSAGEID на запрос отличается от документа.

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

Кто-нибудь знает, как я могу выполнить запрос и получить документы, которые имеют точное значение для messageId?

Благодарим заранее.

+0

Можете ли вы добавить команды cURL, чтобы их воссоздать? Я не думаю, что ваше сопоставление применяется во время индекса. Вы можете попробовать анализатор тестового поля, чтобы убедиться, что он индексируется как один токен. – Andy

+0

Я проиндексировал его, используя Logstash. Как я могу использовать полевой анализатор? – placplacboom

+0

Я не знаком с нормами вокруг Logstash, ваш индекс настроен автоматически? Проверьте полевой анализатор с помощью команды cURL @ http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-analyze.html. – Andy

ответ

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==" 
     } 
    } 
    } 
} 

Я предполагаю, что данные в поле, в котором вы работаете, анализируются. Вы можете проверить это, используя API _mapping. В моем примере это будет:

GET index1/type1/_mapping 
Смежные вопросы