Elasticsearch Facet Tokenization

Използвам terms facet за да получите top 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
Глупав въпрос. Индексирахте ли отново? И коя библиотека използвате? За какво е ignore=400? Можете да проверите дали картографирането е актуализирано с помощта на /_mapping.   -  person grasskode    schedule 19.05.2014
comment
Да, преиндексирах. Използвам pyelasticsearch. Картографирането не се актуализира. Оттук и въпросът. Съпоставянето е: {article:{properties:{articleid:{type:long},domain:{type:string},tags:{type:string},text:{type:string},title:{type:string}, 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