1

完整要点https://gist.github.com/3442562

我有一个分析器:

"analyzer" : {
            "lowercase_keyword" : {
                "type" : "custom",
                "tokenizer" : "keyword",
                "filter" : ["lowercase", "trim"]
            }
        }

在映射中引用:

"location_countries" : {
                "properties" : {
                    "country" : {
                        "type" : "string",
                        "analyzer" : "lowercase_keyword"
                    }
                }
            }

当我在过滤器或构面中使用“国家”字段时,该字段(正确)被视为关键字。

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,分析器和映射仍然定义正确,但分析器似乎没有效果。

我究竟做错了什么?

提前致谢!

4

1 回答 1

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

感谢elasticsearch 邮件列表中的 Clint 提供的所有帮助。

于 2012-08-27T18:10:56.670 回答