2016-06-17 79 views
0

我正在使用Elasticsearch 1.7并遇到以下问题: 当一个属性被命名为索引类型时,我无法过滤属性而不涉及类型名称。我更好地展示一个例子:Elasticsearch类型和属性名称推理

索引:

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 =“沙拉”的对象。 Elasticsearch将属性名称理解为一种类型。当我过滤product.ingredient.name =“沙拉”时,我得到了预期的产品。

我不能得到我想过滤的东西的类型,有没有另一种说法,我的意思是属性名称,而不是一种类型?

回答

1

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

周围有没有更好的方式,除了

一)明确地在前面加上type作为OP提到

二)限制搜索到特定type
http://localhost:9200/myindex/<type>/_search

这是固定在elasticsearch 2.x.来自elastica的blog对此有很好的解释。

+0

谢谢,为了清除。我想,我必须更新。 –