2014-02-13 3 views
1

В моем наборе данных ElasticSearch у нас есть уникальные идентификаторы, разделенные точкой. Ряд образцов может выглядеть c.123.5432ElasticSearch nGram фильтрует пунктуацию

Использование Ngram Я хотел бы быть в состоянии искать: c.123.54

Это не возвращает никаких результатов. Я считаю, что токенизатор разбивается на период. Для этого я добавил «пунктуацию» в token_chars, но никаких изменений в результатах не было. Мой анализатор/токенизатор ниже.

Я также пробовал: «token_chars»: [] < --Программа документации должна содержать все символы.

"settings" : { 
    "index" : { 
     "analysis" : { 
      "analyzer" : { 
       "my_ngram_analyzer" : { 
        "tokenizer" : "my_ngram_tokenizer" 
       } 
      }, 
      "tokenizer" : { 
       "my_ngram_tokenizer" : { 
        "type" : "nGram", 
        "min_gram" : "1", 
        "max_gram" : "10", 
        "token_chars": [ "letter", "digit", "whitespace", "punctuation", "symbol" ] 
       } 
      } 
     } 
    } 
}, 

Edit (Подробнее): Это отображение соответствующего поля:

"ProjectID":{"type":"string","store":"yes", "copy_to" : "meta_data"}, 

И это поле Я копирую его в (который также имеет анализатор Ngram):

"meta_data" : { "type" : "string", "store":"yes", "index_analyzer": "my_ngram_analyzer"} 

Это команда, я использую в смысле, чтобы увидеть, если мой поиск работы (см, что ищет поле «meta_data»):

GET /_search?pretty=true 
{ 
    "query": { 
     "match": { 
      "meta_data": "c.123.54" 
     } 
    } 
} 
+0

Что происходит, когда вы проверить его с:/ /_analyze?text="c.1234.56"&tokenizer=my_ngram_tokenizer – mconlin

+0

@mconlin я получаю результат, который выглядит следующим образом: http://pastebin.com/udrPLSy4 – Brandon

+0

@mconlin Что-то важное: Существующие данные - «C.A1234.5678». Если я ищу «1234», я получаю результат. Если я ищу «A1234», я ничего не получаю. – Brandon

ответ

2

Решение от s1monw на https://github.com/elasticsearch/elasticsearch/issues/5120

При использовании поиска index_analyzer использует только стандартный анализатор. Чтобы исправить это, я изменил index_analyzer на анализатор. Имейте в виду, что количество результатов значительно возрастет, поэтому изменение min_gram на большее число может потребоваться.

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