Elasticsearch类型和属性名称推断

时间:2016-06-17 22:02:52

标签: elasticsearch

我正在使用Elasticsearch 1.7并遇到以下问题: 当一个Attribute被命名为索引的类型时,我不能过滤属性而不涉及类型名称。我最好给你看一个例子:

索引:

curl -XPUT "http://localhost:9200/myindex/ingredient/1" -d'
{
  "name": "salad"
}'

curl -XPUT "http://localhost:9200/myindex/product/1" -d'
{
  "name": "sandwich",
  "ingredient": {
    "name": "salad"
  }
}'

过滤

curl -XGET "http://localhost:9200/myindex/_search" -d'
{
  "query": {
    "term": {
      "ingredient.name": "salad"
    }
  }
}'

响应:

{
  "_index": "myindex",
  "_type": "ingredient",
  "_id": "1",
  "_score": 1,
  "_source": {
    "name": "salad"
  }
}

问题: 响应是类型成分。我想获得具有属性ingredient.name =" salad"的对象。 Elasticsearch将属性名称理解为类型。当我过滤product.ingredient.name =" salad"时,我按预期得到了产品。

我无法获得我想要过滤的东西的类型,是否有另一种说法,我的意思是属性名称,而不是类型?

1 个答案:

答案 0 :(得分:1)

这是elasticsearch中的一个已知问题:1.x其中有多种方法可以引用一个导致歧义的字段。

除了

之外没有更好的方法

a)明确地在OP

中提到的QSplitter前置

b)将搜索限制为特定的type type

这在elasticsearch 2.x中得到修复。来自elastica的blog对此有一个很好的解释。