文件说
span_containing:
big和little子句可以是任何span类型查询。返回包含来自big的匹配跨度。
span_within:
big和little子句可以是任何span类型查询。返回包含在大的内容的匹配跨度。
至于哪些文档与查询匹配,没有区别。区别在于哪个跨度匹配。
该查询将从匹配范围中获得提升,因此span_containing将从big获得提升,而span_within将从匹配的小提升中得到提升。
如果您的span_within或span_containing是考虑匹配范围位置的另一个span查询的一部分,则差异也会变得相关。
例如,假设您有一些文字:
Lorem存有悲坐阿梅德,consectetur adipiscing ELIT。
而你的span_containing / within与前五个术语相匹配,很少匹配“ipsum”。如果你将它包装在span_near中,那么外部span_near的斜率将从span_containing的大边界和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
}