2016-07-07 3 views
0

Я пытаюсь использовать настройку elasticsearch для проекта, над которым я работаю. Мне не интересно, может ли кто-нибудь помочь в правильном направлении, где искать. Я использую индекс со 100 миллионами записей.
Если мне нужно, чтобы иметь возможность масок запросов вроде следующего:Эластичный поиск для поиска адресов электронной почты подстановочных знаков?

b*[email protected] 
b*[email protected]*.com 
*[email protected] 
br*gu*@gmail.com 
*g*@* 

Когда я пытаюсь использовать подстановочные и другие поиски, я не получаю полностью ожидаемых результатов.

Какой поиск с помощью поиска elastics следует изучить в реализации? Является ли ElasticSearch даже правильным инструментом для использования? Источником, из которого я вытаскиваю это, является Mysql, поэтому, если нет, я могу рассмотреть использование Sphinx или Solr.

+0

Для поиска по электронной почте я предлагаю такой подход: http://stackoverflow.com/questions/30115867/elasticsearch-analyzer-and-tokenizer-for-emails –

ответ

2

Я предполагаю, что вы опробовали подстановочный запрос, как описано here.

Однако, если ваша электронная почта анализируется или не анализируется, она имеет совершенно другое поведение. Я бы предложил вам удалить свой индекс и изменить ваше сопоставление. например

PUT /emails 
{ 
    "mappings": { 
     "email": { 
      "properties": { 
       "email": { 
       "type": "string", 
       "index": "not_analyzed" 
      } 
     } 
    } 
    } 
} 

После этого вы можете просто выполнить обычный групповой запрос или query_string. например

GET emails/_search 
{ 
    "query": { 
    "wildcard": { 
     "email": { 
     "value": "s*com" 
     } 
    } 
    } 
} 

Как и в сторону, когда вы просто индекс электронной почты, не устанавливая его как not_analyzed, отображение по умолчанию фактически распадается префикс электронной почты из домена и именно поэтому вы не получите результаты, когда вы делаете с * @ gmail.com. Вы все равно получите результаты для s * или * gmail.com, но для своего случая, используя not_analyzed, работает правильно. Если вы хотите поддерживать нечувствительность к регистру, вы можете посмотреть на пользовательский анализатор, который использует токенизатор uax_url_email, как описано here.

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