2015-09-09 1 views
0

Elasticsearch: 1.6.0поиск Elasticsearch не дает никаких результатов, анализаторы могут быть проблемой версия

Я использую elasticsearch в течение последних месяцев (только начала), и теперь я бег в проблемы с ним , Вот некоторая информация о моей базе данных:

Индекс, который я использую, использует динамическое сопоставление по умолчанию (например: я не рисовал его отображение). Мои объекты должны быть без схемы. Кроме того, индекс использует анализатор по умолчанию (я не прикоснулся, что либо), так index/_settings выглядит следующим образом:

{ 
    "default": { 
     "settings": { 
      "index": { 
       "creation_date": "1441808338958", 
       "uuid": "34Yn1_ixSqOzp9UotOE_4g", 
       "number_of_replicas": "1", 
       "number_of_shards": "1", 
       "version": { 
        "created": "1060099" 
       } 
      } 
     } 
    } 
} 

Вот меня вопрос: на некоторые значения поля поиска не работает, как ожидалось (Я пришел к выводу, что это из-за анализатора). Пример: поле email имеет значение [email protected]; {"query":{"bool":{"must":[{"term":{"user.email":"[email protected]"}}]}} не будет работать, но значение термина, как только «пользователь» работает (потому что оно каким-то образом его токенизирует, и нет никакого токена с полным адресом электронной почты).

Вот что я хочу: Я хочу, чтобы оба подстановочных полнотекстового поиска (поиск плохого слова в тексте комментария) и строгих поиска (например, по электронной почте, например) на любом поле, то я буду используя bool и should либо term, либо wildcard.

Проблема в том, что я просто не могу сказать ему «хорошо, на этом поле вы должны использовать X-анализатор», потому что все мои поля являются динамическими.

Что я пробовал: В настройках индекса I PUT-ed: {"analysis":{"analyzer":{"default":{"type":"keyword"}}}}; не работает: ничего не изменилось (я также не забыл закрыть индекс, прежде чем делать это и открыть его).

Этот вопрос относится даже к анализаторам?

+1

если вы измените настройку [анализатора] (https: //www.elastic.co/guide/en/elasticsearch/guide/current/reindex.html # reindex) вам потребуется переиндексировать документы. – keety

ответ

0

С помощью Райан Huynh я решить мою проблему:

Используйте динамические отображения; создайте индекс следующим образом:

PUT /index 
{ 
    "mappings": { 
    "_default_": { 
     "dynamic_templates": [ 
     { 
      "string_template": { 
      "mapping": { 
       "index": "not_analyzed", 
       "type": "string" 
      }, 
      "match_mapping_type": "string", 
      "match": "*" 
      } 
     } 
     ] 
    } 
} 
1

Этот запрос не будет работать

{ "запрос": { "BOOL": { "сусло": [{ "Термин": { "user.email": "[email protected] «}}]}}

Term является точным соответствием, то есть независимо от вашего значения для этого поля (» [email protected] "в вашем случае) должен соответствовать любой лексемы ES имеет для этого поля.

Если вы не назначили какой-либо анализатор для этого поля, ES предположит, что вы используете стандартный анализатор для этого поля. Когда этот «[email protected]» индексируется, он будет маркироваться в («пользователь», «пример», «ком»).

Чтобы решить вашу проблему, вы должны сообщить ES «not_analyzed» поле электронной почты в картографировании вашего индекса.

+0

Мне нужно сделать это для всех моих полей (которые являются динамическими). Поэтому я думаю, что мне нужно сделать динамическое сопоставление – Mayhem93