Elasticsearch :imum_should_match для вложенного запроса - PullRequest
0 голосов
/ 18 марта 2020

У меня есть вложенное поле типа

{
  "tags": [
    {
      "tag": "lorem ipsum"
    },
    {
      "tag": "Lorem ipsum dolor sit amet"
    }
  ]
}

И отображение типа

{
  "tags": {
    **"type": "nested",**
    "properties": {
      "tag": {
        "type": "text",
        "fields": {
          "keyword": {
            "type": "keyword",
            "ignore_above": 256
          }
        }
      }
    }
  }
}

Можем ли мы использовать что-то вроде minimum_should_match : 80 для поля вложенного тега? Так что я смогу контролировать уровень релевантности через него?
Пример: если я ищу "Lorem ipsum dolor" с minimum_should_match: 90, я не должен получить lorem ipsum в результате.

1 Ответ

1 голос
/ 18 марта 2020

Вложенный запрос - это всего лишь синтаксис для доступа к вложенным полям, поэтому минимальный_шаблон можно использовать, как и в других запросах

Запрос

{
  "query": {
    "nested": {
      "path": "tags",
      "query": {
        "match": {
          "tags.tag": 
          {
            "query": "lorem ipsum dolor",
            "minimum_should_match": "90%"
          }
        }
      },
      "inner_hits": {}
    }
  }
}

Результат:

  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 0.671082,
    "hits" : [
      {
        "_index" : "index56",
        "_type" : "_doc",
        "_id" : "01We63ABq1Ib1oOmkJxn",
        "_score" : 0.671082,
        "_source" : {
          "tags" : [
            {
              "tag" : "lorem ipsum"
            },
            {
              "tag" : "Lorem ipsum dolor sit amet"
            }
          ]
        },
        "inner_hits" : {
          "tags" : {
            "hits" : {
              "total" : {
                "value" : 2,
                "relation" : "eq"
              },
              "max_score" : 0.89999837,
              "hits" : [
                {
                  "_index" : "index56",
                  "_type" : "_doc",
                  "_id" : "01We63ABq1Ib1oOmkJxn",
                  "_nested" : {
                    "field" : "tags",
                    "offset" : 1
                  },
                  "_score" : 0.89999837,
                  "_source" : {
                    "tag" : "Lorem ipsum dolor sit amet"
                  }
                },
                {
                  "_index" : "index56",
                  "_type" : "_doc",
                  "_id" : "01We63ABq1Ib1oOmkJxn",
                  "_nested" : {
                    "field" : "tags",
                    "offset" : 0
                  },
                  "_score" : 0.44216567,
                  "_source" : {
                    "tag" : "lorem ipsum"
                  }
                }
              ]
            }
          }
        }
      }
    ]
  }

При минимальном совпадении: 90% оба вложенных документа возвращаются в inner_hits . Причина : с документы

Число, рассчитанное по процентам, округляется в меньшую сторону и используется как минимум.

С 90% от 22,7 будет округлено до 2. Таким образом, 2 токена должны совпадать. Если минимум должен соответствовать: 100%, то будет возвращено только одно вложенное do c

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...