почемуasticsearch рассчитывает балл для срочных запросов? - PullRequest
1 голос
/ 02 марта 2020

Я хочу сделать простой запрос, основанный на знании уникального значения поля, используя термин запрос. Например:

{
  "query": {
    "term": {
      "products.product_id": {
        "value": "Ubsdf-234kjasdf"
      }
    }
  }
}

Относительно term queries, документация Elasticsearch гласит:

Возвращает документы, которые содержат точный термин в указанном поле. Вы можете использовать термин запрос для поиска документов на основе точного значения, такого как цена, идентификатор продукта или имя пользователя.

С другой стороны, документация также предлагает что _score рассчитывается для запросов, в которых важна релевантность (и не относится к контексту фильтра, который включает точное совпадение ).

Я нахожу это немного запутанным. Почему Elasticsearch вычисляет _score для запросов термина, которые должны быть связаны с точным соответствием , а не с релевантностью?

Ответы [ 2 ]

2 голосов
/ 02 марта 2020

термины запросов не анализируются, следовательно, они не будут go с фазой анализа, следовательно, используются для точного соответствия , но их оценка все еще вычисляется при использовании в контексте запроса .

Когда вы используете термины запросов в контексте фильтра, это означает, что вы не выполняете поиск по ним, а скорее выполняете фильтрацию по ним, следовательно, для них не рассчитывается оценка.

Дополнительная информация по запросу и контекст фильтра в официальном ES do c.

И пример запроса термина в фильтре, и контекст запроса показаны в моем примере ниже

Термин запрос в контексте запроса

{
    "query": {
        "bool": {
            "must": [
                {
                    "term": {
                        "title": "c"
                    }
                }
            ]
        }
    },
    "size": 10
}

И результат со счетом

"hits": [
            {
                "_index": "cpp",
                "_type": "_doc",
                "_id": "4",
                "_score": 0.2876821, --> notice score is calculated
                "_source": {
                    "title": "c"
                }
            }
        ]

Срок запроса в контексте фильтра

{
    "query": {
        "bool": {
            "filter": [ --> prev cluase replaced by `filter`
                {
                    "term": {
                        "title": "c"
                    }
                }
            ]
        }
    },
    "size": 10
}

И результат поиска с контекстом фильтра

 "hits": [
            {
                "_index": "cpp",
                "_type": "_doc",
                "_id": "4",
                "_score": 0.0, --> notice score is 0.
                "_source": {
                    "title": "c"
                }
            }
        ]
2 голосов
/ 02 марта 2020

Контекст фильтра означает, что вам нужно обернуть ваш запрос запроса в bool/filter запрос, например:

{
  "query": {
    "bool": {
      "filter": {
        "term": {
          "products.product_id": {
            "value": "Ubsdf-234kjasdf"
          }
        }
      }
    }
  }
}

Приведенный выше запрос не будет вычислять оценки.

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