elasticsearch中span_containing和span_within查询之间有什么区别?

问题描述 投票:1回答:1

文件说

span_containing:

big和little子句可以是任何span类型查询。返回包含来自big的匹配跨度。

span_within:

big和little子句可以是任何span类型查询。返回包含在大的内容的匹配跨度。

elasticsearch lucene search-engine querydsl
1个回答
0
投票

至于哪些文档与查询匹配,没有区别。区别在于哪个跨度匹配。

  • span_containing匹配大。
  • span_within匹配很少。

该查询将从匹配范围中获得提升,因此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
}
© www.soinside.com 2019 - 2024. All rights reserved.