2015-05-20 4 views
1

Мы находимся в процессе реализации Elasticsearch и с использованием .Nest в .NET-решении. Мы создали и загрузили индекс с несколькими полями. Мы хотим определить и проанализировать, что будет производить одни и те же результаты поиска для поля itemNumber, когда пользователь вводит UNV-1234 или UNV1234. Поле itemNumber ограничено номером позиции без дополнительных слов. Однако поле номера позиции может содержать число, разделенное пробелом.Elasticsearch Analyzer, который игнорирует дефис

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

Может ли кто-нибудь предоставить информацию о том, как лучше всего это выполнить?

"itemNumber": { 
    "type": "string", 
    "index": "not_analyzed", 
    "fields": { 
     "_english": { 
     "type": "string", 
     "analyzer": "english" 
     }, 
     "_keyword": { 
     "type": "string", 
     "analyzer": "keyword" 
     }, 
     "_standard": { 
     "type": "string", 
     "analyzer": "standard" 
     } 
    } 
} 

ответ

0

Вам необходимо определить пользовательский анализатор с «ключевым словом» Tokenizer и шаблоном заменой маркеров фильтра для удаления какого-либо специальный символа и использовать его для своей области. Анализатор можно определить как ниже

"analysis" : { 
     "filter" : { 
      "cleanspecial": { 
       "type": "pattern_replace", 
       "pattern": "[^a-zA-Z0-9]", 
       "replacement": "" 
      } 
     }, 
     "analyzer" : { 
      "cleanspecialanalyzer": { 
       "filter": ["cleanspecial"], 
       "type": "custom", 
       "tokenizer": "keyword" 
      } 
     } 
    } 

Примечание: Пожалуйста, проверьте шаблон, я его не тестировал.

Вы можете изменить отображение, как показано ниже

"itemNumber": { 
    "type": "string", 
    "index": "not_analyzed", 
    "fields": { 
     "_english": { 
     "type": "string", 
     "analyzer": "english" 
     }, 
     "_keyword": { 
     "type": "string", 
     "analyzer": "cleanspecialanalyzer" 
     }, 
     "_standard": { 
     "type": "string", 
     "analyzer": "standard" 
     } 
    } 
} 

поиска может произойти на поле itemNumber._keyword