文档说
包含span_:
big和little子句可以是任何跨度类型查询。匹配范围 来自大的包含来自小的匹配。
span_within:
big和little子句可以是任何跨度类型查询。匹配范围 从封闭在大容器中的小容器返回。
答案 0 :(得分:0)
就查询匹配的文档而言,没有区别。区别在于匹配的跨度。
查询将从匹配的跨度中获得提升,因此span_ contains将从匹配的跨度中获得提升,而span_within将从匹配的跨度中得到提升。
如果您的span_within或span_ contains是另一个考虑匹配范围的位置的范围查询,则该差异也变得很重要。
例如,假设您有一些文字:
Lorem ipsum dolor坐下来,奉献自若。
并且您的span_ contains / within匹配前五个术语,几乎不匹配“ ipsum”。如果再将其包裹在span_near中,则外部span_near的斜率将从span_contain的大边界和span_within的little(“ ipsum”)边界开始。
“ amet”(大号的结尾)与“ consectetur”之间的距离≤1,因此该将与文本匹配:
"span_near": {
"clauses": [
"span_containing" : {
"little" : {
"span_term" : { "field" : "ipsum" }
},
"big" : {
"span_near" : {
"clauses" : [
{ "span_term" : { "field" : "lorem" } },
{ "span_term" : { "field" : "amet" } }
],
"slop" : 5,
"in_order" : true
}
}
},
{ "span_term" : { "field" : "consectetur" } }
],
"slop": 1,
"in_order": true
}
但是“ ipsum”和“ consectetur”之间的距离大于1,因此该不会:
"span_near": {
"clauses": [
"span_within" : {
"little" : {
"span_term" : { "field" : "ipsum" }
},
"big" : {
"span_near" : {
"clauses" : [
{ "span_term" : { "field" : "lorem" } },
{ "span_term" : { "field" : "amet" } }
],
"slop" : 5,
"in_order" : true
}
}
},
{ "span_term" : { "field" : "consectetur" } }
],
"slop": 1,
"in_order": true
}