如何确保elasticsearch正在使用映射中定义的分析器?

时间:2015-01-08 12:05:56

标签: elasticsearch

我在elasticsearch中有一个索引,其中包含针对特定字段的多个自定义分析器。例如:

"titulo" : {
   "type" : "string",
   "index_analyzer" : "analyzer_titulo",
   "search_analyzer" : "analyzer_titulo"
}

analyzer_titulo是这样的:

"analyzer_titulo":{
    "filter":[
        "standard",
        "lowercase",
        "asciifolding",
        "stop_filter",
        "filter_shingle",
        "stemmer_filter"
    ],
    "char_filter":[
        "html_strip"
    ],
    "tokenizer":"standard"
}

但是,当我尝试使用_analyze api来测试此字段的分析器时,elasticsearch似乎忽略了自定义分析器: kopf analysis tab

正如您所看到的,两种结果都不同,但如果我的理解是正确的,那么它们应该是相同的。

我在这里缺少什么?有没有办法使用_explain api来查看使用的是什么分析器?

PS:遗憾的是,我无法发布我的完整映射(公司政策),但我只有一个索引和一种类型。

由于

1 个答案:

答案 0 :(得分:0)

我不熟悉您用来测试分析器的工具(不知道为什么它不起作用),但您可以做的是运行一个返回索引中的值的查询

curl 'http://localhost:9200/myindex/livros/_search?pretty=true' -d '{
    "query" : {
        "match_all" : { }
    },
    "script_fields": {
        "terms" : {
            "script": "doc[field].values",
            "params": {
                "field": "titulo"
            }
        }
    }
}'

如果您的类型中包含许多文档,那么您需要将match_all :{}更改为更具体的内容。