2016-06-18 2 views
2

Я хочу точно соответствовать строке ":Feed:" в поле message и вернуться назад, чтобы вытащить все такие записи. Мне кажется, что json также соответствует простому слову " feed ". Я не уверен, где я ошибаюсь. Нужно ли добавить "constant_score" к этому запросу JSON? JSON У меня в настоящее время, как показано ниже:Точное совпадение в эластичном поисковом запросе

{ 
    "query": { 
     "bool": { 
      "must": { 
       "query_string": { 
        "fields": ["message"], 
        "query": "\\:Feed\\:" 
       } 
      }, 
      "must": { 
       "range": { 
        "timestamp": { 
         "gte": "now-1d", 
         "lte": "now" 
        } 
       } 
      } 
     } 
    } 
} 
+0

попробуйте установить сообщение {index: "not_analyzed"} в отображении – keety

+0

@keety спасибо за ввод. К сожалению, у меня нет прав на изменение индексации. Я считаю, что я должен искать что-то вроде '* \\: Feed \\: *', если поле было «not_analyzed». Похоже, мне не повезло. – Dhanesh

ответ

3

Как указано здесь: Finding Exact Values, так как поле было проанализировано при индексируются - у вас нет никакой возможности точного сопоставления лексемы («:»). Всякий раз, когда маркеры должны быть доступны для поиска, отображение должно быть «not_analyzed», и данные необходимо переиндексировать.

Если вы хотите иметь возможность легко сопоставлять только «: feed:» внутри поля сообщения, вы можете захотеть вычислить анализатор, который не имеет токенизацию «:», чтобы вы могли запрашивать поле с помощью простого «match» вместо диких символов.

Смежные вопросы