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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了elasticsearch中span_containing和span_within查询之间有什么区别?相关的知识,希望对你有一定的参考价值。

文件说

span_containing:

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

span_within:

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

答案

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

  • 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
}

以上是关于elasticsearch中span_containing和span_within查询之间有什么区别?的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch:如何使用 shell 脚本来写入数据到 Elasticsearch 中

ElasticSearch(十六):在docker中构建Elasticsearch集群

Elasticsearch如何在 Elasticsearch 中轻松编写脚本

elasticsearch5.4.1中怎样创建客户端连接

Elasticsearch:从 Spring Boot 应用中连接 Elasticsearch

Elasticsearch在Elasticsearch中支持纳秒时间戳