Токенизация аспектов Elasticsearch

Я использую термины чтобы получить топ terms на сервере elasticsearch. Теперь мои теги "indian-government" не рассматриваются как один тег. Он рассматривается как "indian" "government". Итак, самый используемый тег — "indian". Как это исправить? Должен ли я изменить токенизацию?

        'settings': {
                'analysis': {
                        'analyzer': {
                                'my_ngram_analyzer' : {
                                        'tokenizer' : 'my_ngram_tokenizer',
                                         'filter': ['my_synonym_filter']
                                 }
                        },
                         'filter': {
                                 'my_synonym_filter': {
                                        'type': 'synonym',
                                        'format': 'wordnet',
                                        'synonyms_path': 'analysis/wn_s.pl'
                                }
                        },
                         'tokenizer' : {
                                 'my_ngram_tokenizer' : {
                                        'type' : 'nGram',
                                        'min_gram' : '1',
                                        'max_gram' : '50'
                                }
                        }
                }
        }

Изменить: на основе комментариев индексация выглядит следующим образом. Однако результаты не меняются:

    es.indices.create(
            index="article-index",
            body={
                    'settings': {
                            'analysis': {
                                    'analyzer': {
                                            'my_ngram_analyzer' : {
                                                    'tokenizer' : 'my_ngram_tokenizer',
                                                    'filter': ['my_synonym_filter']
                                            }
                                    },
                                    'filter': {
                                            'my_synonym_filter': {
                                                    'type': 'synonym',
                                                    'format': 'wordnet',
                                                    'synonyms_path': 'analysis/wn_s.pl'
                                            }
                                    },
                                    'tokenizer' : {
                                            'my_ngram_tokenizer' : {
                                                    'type' : 'nGram',
                                                    'min_gram' : '1',
                                                    'max_gram' : '50'
                                            }
                                    }
                            }
                    },
                       'mappings': {
                            'my_mapping_type': {
                                  '_all': {
                                    'enabled': False
                                  },
                                  '_source': {
                                    'compressed': True
                                  },
                                  'properties': {
                                    "tags": {
                                      "type": "string",
                                      "index": "not_analyzed"
                                    }
                                  }
                            }
                    }
            },
            # ignore already existing index
            ignore=400
    )

РЕДАКТИРОВАТЬ: Решено. my_mapping_type нужно заменить на doc_type (в моем случае это «статья»), и это работает :)


person Pratik Poddar    schedule 17.05.2014    source источник
comment
Я считаю, что ваше поле тега должно быть установлено на not_analyzed   -  person Konstantin V. Salikhov    schedule 17.05.2014
comment
Глупый вопрос. Вы переиндексировали? А какую библиотеку вы используете? Для чего игнор=400? Вы можете проверить, обновилось ли сопоставление, используя /_mapping.   -  person grasskode    schedule 19.05.2014
comment
Да, я переиндексировал. Я использую pyelasticsearch. Маппинг не обновлялся. Отсюда вопрос. Сопоставление: {статья:{свойства:{идентификатор статьи:{тип:длинный},домен:{тип:строка},теги:{тип:строка},текст:{тип:строка},название:{тип:строка}, URL-адрес: {тип: строка}}}}   -  person Pratik Poddar    schedule 19.05.2014
comment
Как вы говорите es использовать сопоставление my_mapping_type для индексации? Похоже, я только что определил новое сопоставление, но не использовал его для индексации.   -  person Pratik Poddar    schedule 19.05.2014


Ответы (1)


Создание поля not_analysed должен работать, если он соответствует вашим требованиям.

curl -XPUT localhost:9200/INDEX -d '{
  "settings": {
    "number_of_shards": 5,
    "number_of_replicas": 2
  },
  "mappings": {
    "my_type": {
      "_all": {
        "enabled": false
      },
      "_source": {
        "compressed": true
      },
      "properties": {
        "tag": {
          "type": "string",
          "index": "not_analyzed"
        }
      }
    }
  }
}'
person prayagupd    schedule 17.05.2014
comment
Спасибо. Нужно ли мне повторно индексировать документы, которые я проиндексировал? Кроме того, мои теги полей на самом деле представляют собой список строк. Примеры тегов: [индия, индийское правительство] ? Как мне это включить? Какой должен быть тип? - person Pratik Poddar; 17.05.2014