一尘不染

Elasticsearch中的默认索引分析器

elasticsearch

我在Elasticsearch上遇到问题,我不希望对索引项进行分析。但是elasticsearch有一些默认设置,可以在空间上标记它。因此,我的方面查询未返回我想要的结果。

我读到"index" : "not_analyzed"索引类型的属性应该工作。但是问题是我事先不知道我的文档结构。我会在不知道表结构的情况下将随机MySQL数据库索引到elasticsearch。

我如何设置elasticsearch,使其默认情况下会"index" : "not_analyzed"一直使用,除非另有要求。谢谢

PS:如果我可以直接使用任何API,我会使用Java。


阅读 431

收藏
2020-06-22

共1个答案

一尘不染

我会使用动态模板-它应该可以满足您的需求:

{
    "testtemplates" : {
        "dynamic_templates" : [
            {
                "template1" : {
                    "match" : "*",
                    "match_mapping_type" : "string",
                    "mapping" : {
                        "type" : "string",
                        "index" : "not_analyzed"
                    }
                }
            }
        ]
    }
}

有关此方法的更多信息,请参见:

https://www.elastic.co/guide/zh-CN/elasticsearch/guide/current/custom-
dynamic-mapping.html#dynamic-
templates

重要提示: 如果有人建议采用这种方法来解决 not_analyzed 问题,那么它将行不通! 关键字
分析器会对数据进行一些分析,然后将数据转换为小写字母。

例如 Data: ElasticSearchRocks ==> Keyword Analyzer: elasticsearchrocks

自己尝试分析查询,看看它正在发生。

curl -XPUT localhost:9200/testindex -d '{
    "index" : {
        "analysis" : {
            "analyzer" : {
                "default" : {
                    "type" : "keyword"
                }
            }
       }
    }
}'

http://www.elasticsearch.org/guide/zh-
CN/elasticsearch/reference/current/analysis-keyword-
analyzer.html

2020-06-22