https://gist.github.com/3442562
的全部要点我有一台分析仪:
"analyzer" : {
"lowercase_keyword" : {
"type" : "custom",
"tokenizer" : "keyword",
"filter" : ["lowercase", "trim"]
}
}
在映射中引用:
"location_countries" : {
"properties" : {
"country" : {
"type" : "string",
"analyzer" : "lowercase_keyword"
}
}
}
当我在过滤器或构面中使用“country”字段时,该字段被(正确地)视为关键字。
curl -XGET 'localhost:9200/clinical_trials/_search?pretty=true' -d '
{
"query" : {
"term" : { "brief_title" : "dermatitis" }
},
"filter" : {
"term" : { "country" : "united states" }
},
"facets" : {
"tag" : {
"terms" : { "field" : "country" }
}
}
}
'
分面结果:
"facets" : {
"tag" : {
"_type" : "terms",
"missing" : 0,
"total" : 1,
"other" : 0,
"terms" : [ {
"term" : "united states",
"count" : 1
} ]
}
一切正常,直到机器重新启动或Elastic Search服务重新启动。重新启动后,我的所有过滤器都停止工作,就好像分析仪不存在一样。
针对相同数据的相同查询导致:
"facets" : {
"tag" : {
"_type" : "terms",
"missing" : 0,
"total" : 2,
"other" : 0,
"terms" : [ {
"term" : "united",
"count" : 1
}, {
"term" : "states",
"count" : 1
} ]
}
如果我查询索引的_settings / _mappings,分析器和映射仍然正确定义,但分析器似乎没有效果。
我做错了什么?
提前致谢!
答案 0 :(得分:0)
国家/地区字段显示在多个嵌套文档中,但我只设置其中一个字段的映射。重新启动后,elasticsearch以不同的顺序加载字段,将过滤器/构面应用于错误的字段。
完全限定构面和过滤器字段名称可以解决我的问题。
curl -XGET 'localhost:9200/clinical_trials/_search?pretty=true' -d '
{
"query" : {
"term" : { "brief_title" : "dermatitis" }
},
"filter" : {
"term" : { "location_countries.country" : "united states" }
},
"facets" : {
"tag" : {
"terms" : { "field" : "location_countries.country" }
}
}
}
'
感谢Clint在elasticsearch mailing list提供所有帮助。