В чем разница между запросами span_conisting и span_within вasticsearch? - PullRequest
0 голосов
/ 10 сентября 2018

Документация гласит:

span_conisting:

Большие и маленькие предложения могут быть любыми запросами типа span.Возвращаются совпадающие промежутки от больших, которые содержат совпадения из маленьких.

span_within:

Большие и маленькие предложения могут быть любыми запросами типа span.Соответствующие промежутки из маленьких, которые заключены в большой возвращаются.

1 Ответ

0 голосов
/ 12 сентября 2018

Насколько документы соответствуют запросу, нет никакой разницы. Разница в том, какой диапазон соответствует.

  • span_contents, содержащий большие.
  • span_within соответствует немного.

Запрос получит повышение от соответствующего диапазона, поэтому span_conisting получит увеличение от большого, а span_within получит повышение от соответствующего небольшого.

Разница также становится уместной, если ваш span_within или span_conisting является частью другого запроса span, который учитывает позицию совпадающего span.


Например, допустим, у вас есть текст:

Lorem Ipsum Dolor Sit Amet, Concetetur Adipiscing Elit.

И ваш span_conisting / inside соответствует первым пяти терминам, с небольшим соответствием "ipsum". Если вы затем оберните его в span_near, то этот внешний span_near будет взят из границ big для span_conisting и из little ("ipsum") для span_within.

Расстояние между "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" и "contectetur" составляет> 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
}
...