对字段的弹性搜索分析未按预期工作

时间:2015-12-28 14:45:38

标签: elasticsearch

我正在使用以下索引上的ES 2.1分析器(恰当地命名为my_index):

$ curl -XPUT 'localhost:9200/my_index/' -d '
{
    "settings" : {
        "analysis" : {
            "analyzer" : {
                "my_synonym_analyzer" : {
                    "tokenizer" : "standard",
                    "filter" : [ "my_synonym_filter" ]
                }
            },
            "filter" : {
                "my_synonym_filter" : {
                    "type" : "synonym",
                    "synonyms" : [ "foo, bar" ]
                }
            }
        }
    },
    "mappings" : {
        "my_type" : {
            "properties" : {
                "my_field" : {
                   "type" : "string",
                   "analyzer" : "my_synonym_analyzer"
                }
            }
        }
    }
}'

以下分析按预期工作:

$ curl -XGET 'localhost:9200/my_index/_analyze?analyzer=my_synonym_analyzer&text=foo'
$ curl -XGET 'localhost:9200/my_index/_analyze?field=my_field&text=foo'

{
    "tokens" : [ {
        "token" : "foo",
        "start_offset" : 0,
        "end_offset" : 3,
        "type" : "<ALPHANUM>",
        "position" : 0
    }, {
        "token" : "bar",
        "start_offset" : 0,
        "end_offset" : 3,
        "type" : "SYNONYM",
        "position" : 0
    } ]
}

然而,这不是。我期望与上面相同的输出,如reference中所述。

$ curl -XGET 'localhost:9200/my_index/_analyze?field=my_type.my_field&text=foo'

{
    "tokens" : [ {
        "token" : "foo",
        "start_offset" : 0,
        "end_offset" : 3,
        "type" : "<ALPHANUM>",
        "position" : 0
    } ]
}

我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

从ES 2.0开始,field names may not be prefixed with the type name了,即使它曾经使用过Elasticsearch的2.x之前的版本。

因此,如果你正在使用Elasticsearch 2.x,你所观察到的就是你应该得到的东西,即

  • 使用field=my_field分析工作
  • 在使用field=my_type.my_field进行分析时已不复存在。