我正在使用terms facet在elasticsearch服务器中获取顶级terms。现在,我的标签"indian-government"不被视为一个标签。将其视为"indian" "government"。因此,最常用的标签是"indian"如何解决此问题?我应该更改 token 化吗?

        '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(在我的情况下是其“文章”),并且可以正常工作:)

最佳答案

如果需要,将字段 not_analysed 设为should work

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"
        }
      }
    }
  }
}'

08-25 07:38