Elasticsearch之Nested Query,elasticsearch


                                                     (这是一个小系列:请戳:ElasticsearchNested(嵌套)系列,查看其他nested相关文章)

Because nested objects are indexed as separate hidden documents, we can’t query them directly.Instead, 

we have to use the nested query or nested filter to access them:

   nested object作为一个独立隐藏文档单独建索引,因此,我们不能直接查询它们。取而代之,我们必须使用nested查询或者nested filter来接触它们:

curl -XGET 'localhost:9200/my_index' -d '
{
  "query":{
     "bool":{
	    "must":[
		   {"match":{"title":"eggs"}},
		   {
		     "nested":{
			    "path":"comments",
				"query":{
				   "bool":{
				      "must":[
					     {"match":{"comments.name":"john"}},
						 {"match":{"comments.age":28}}
					  ]
				   }
				}
			 }
		   }
		]
	 }
  }
}

   A nested field can contain other nested fields. Similarly, a nested query can contain other nested queries. 

The nesting hierarchy is applied as you would expect.

   一个nested字段可以包含其他的nested 字段。相似地,一个nested查询可以包含其他nested查询。只要你希望,你就可以使用嵌套层。

  Of course, a nested query could match several nested documents. Each matching nested document would have its own

relevance score, but these multiple scores need to be reduced to a single score that can be applied to the root document.

  当然,一个nested查询可以匹配多个nested文本。每个匹配的nested文本都有它自己相关评分,但是这些评分必须归为一个总分应用于根文本上。

  By default, it averages the scores of the matching nested documents. This can be controlled by setting the score_mode 

parameter to avg, max, sum, or even none (in which case the root document gets a constant score of 1.0).

  默认会平均所有匹配的nested文本的分数。当然,也可以通过设定score_modec参数为avg,max,sum,或者甚至为none(根文本获得一致评分1.0)

 

curl -XGET 'localhost:9200/my_index' -d '
{
  "query":{
     "bool":{
	    "must":[
		   {"match":{"title":"eggs"}},
		   {
		     "nested":{
			    "path":"comments",
				"score_mode":"max",
				"query":{
				   "bool":{
				      "must":[
					     {"match":{"comments.name":"john"}},
						 {"match":{"comments.age":28}}
					  ]
				   }
				}
			 }
		   }
		]
	 }
  }
}

   nested filter behaves much like a nested query, except that it doesn’t accept the score_mode parameter. It can

be used only in filter context—such as inside a filtered query—and it behaves like any other filter: 

it includes or excludes, but it doesn’t score.

一个nested过滤行为和一个nested 查询非常像,除了它不接受score_mode。它只会用在过滤场景中——比如一个过滤查询中——它的行为同样类似其他过滤:

要么包括,要么不包括,不会评分。


原文:http://www.elastic.co/guide/en/elasticsearch/guide/current/nested-query.html

相关内容