2016-01-24 2 views
0

У меня есть партия продуктов «smartphones» в моей ES, и мне нужно запросить их, используя текст «смартфон». Поэтому я смотрю в составный фильтр токенов. В частности, я планирую использовать специальный фильтр следующим образом:Как создать и добавить пользовательский анализатор в поиск эластичности?

curl -XPUT 'localhost:9200/_all/_settings -d ' 
{ 
    "analysis" : { 
    "analyzer":{ 
     "second":{ 
     "type":"custom", 
     "tokenizer":"standard", 
     "filter":["myFilter"] 
     } 
     "filter": { 
     "myFilter" :{ 
      "type" : "dictionary_decompounder" 
      "word_list": ["smart", "phone"] 
      } 
      }    
    } 
} 
} 
' 

Правильно ли это? Также я хотел бы спросить вас, как я могу создать и добавить пользовательский анализатор в ES? Я просмотрел несколько ссылок, но не мог понять, как это сделать. Наверное, я ищу правильный синтаксис. Спасибо

EDIT

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

{ 
    "test_index" : { 
    "settings" : { 
     "index" : { 
     "creation_date" : "1453761455612", 
     "analysis" : { 
      "filter" : { 
      "myFilter" : { 
       "type" : "dictionary_decompounder", 
       "word_list" : [ "smart", "phone" ] 
      } 
      }, 
      "analyzer" : { 
      "second" : { 
       "type" : "custom", 
       "filter" : [ "lowercase", "myFilter" ], 
       "tokenizer" : "standard" 
      } 
      } 
     }, 
     "number_of_shards" : "5", 
     "number_of_replicas" : "1", 
     "version" : { 
      "created" : "1040599" 
     }, 
     "uuid" : "xooKEdMBR260dnWYGN_ZQA" 
     } 
    } 
    } 
} 

ответ

3

Ваш подход выглядит хорошо, я бы также рассмотреть вопрос о добавлении lowercase token filter, так что даже смартфон (обратите внимание верхнийРЕГИСТР «S») будет разделен на смарт и телефон.

Затем Вы можете создать индекс с анализатором, как это,

curl -XPUT 'localhost:9200/your_index -d ' 
{ 
    "settings": { 
    "analysis": { 
     "analyzer": { 
     "second": { 
      "type": "custom", 
      "tokenizer": "standard", 
      "filter": [ 
      "lowercase", 
      "myFilter" 
      ] 
     } 
     }, 
     "filter": { 
     "myFilter": { 
      "type": "dictionary_decompounder", 
      "word_list": [ 
      "smart", 
      "phone" 
      ] 
     } 
     } 
    } 
    }, 
    "mappings": { 
    "my_type": { 
     "properties": { 
     "name": { 
      "type": "string", 
      "analyzer": "second" 
     } 
     } 
    } 
    } 
} 
' 

Здесь вы создаете индекс с именем your_index, custom analyzer именем второго и применяются, что имени поля.

Вы можете проверить, если анализатор работает, как ожидается, с analyze api как этого

curl -XGET 'localhost:9200/your_index/_analyze' -d ' 
{ 
    "analyzer" : "second", 
    "text : "LG Android smartphone" 
}' 

Надеется, что это помогает !!

+0

Thnx много для вас ответ. Выглядит очень аналитически и точно. Я попробую и дам вам знать, работает ли это. – panipsilos

+0

Hi Chintan. Я добавил пользовательский анализатор. Однако когда я запустил анализатор, он не разделил «смартфон» на «умный» и «телефон». Любые предложения? – panipsilos

+0

какая версия ES вы используете? – ChintanShah25

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