2014-12-01 3 views

ответ

2

Чтобы сделать конкатенацию, я предполагаю, что вы просто хотите удалить все пробелы из ваших входных данных. Для этого вам необходимо реализовать pattern_replace char filter, который заменяет пространство ничем.

Настройка ngram tokenizer должна быть простой - укажите только минимальную длину маркера.

Также стоит добавить - чтобы сделать поиск нечувствительным к регистру.

curl -XPOST localhost:9200/my_index -d '{ 
    "index": { 
    "analysis": { 
     "analyzer": { 
      "my_new_analyzer": { 
       "filter": [ 
        "lowercase" 
       ], 
       "tokenizer": "my_ngram_tokenizer", 
       "char_filter" : ["my_pattern"], 
       "type": "custom" 
      } 
     }, 
     "char_filter" : { 
      "my_pattern":{ 
      "type":"pattern_replace", 
      "pattern":"\u0020", 
      "replacement":"" 
      } 
     }, 
     "tokenizer" : { 
       "my_ngram_tokenizer" : { 
        "type" : "nGram", 
        "min_gram" : "3", 
        "max_gram" : "10", 
        "token_chars": ["letter", "digit", "punctuation", "symbol"] 
       } 
      } 
    } 
    } 
}' 

тестируем:

curl -XGET 'localhost:9200/my_index/_analyze?analyzer=my_new_analyzer&pretty' -d 'stack overflow' 

дает следующее (только небольшую часть, показанную ниже):

{ 
"tokens" : [ { 
    "token" : "sta", 
    "start_offset" : 0, 
    "end_offset" : 3, 
    "type" : "word", 
    "position" : 1 
}, { 
    "token" : "stac", 
    "start_offset" : 0, 
    "end_offset" : 4, 
    "type" : "word", 
    "position" : 2 
}, { 
    "token" : "stack", 
    "start_offset" : 0, 
    "end_offset" : 6, 
    "type" : "word", 
    "position" : 3 
}, { 
    "token" : "stacko", 
    "start_offset" : 0, 
    "end_offset" : 7, 
    "type" : "word", 
    "position" : 4 
}, { 
    "token" : "stackov", 
    "start_offset" : 0, 
    "end_offset" : 8, 
    "type" : "word", 
    "position" : 5 
}, {