Как объединить запрос bool с интервальным запросом или любым другим запросом - PullRequest
2 голосов
/ 20 марта 2020

Я проиндексировал данные в asticsearch .

Я хочу запросить комбинацию Логический запрос с Интервальный запрос .

Если возможно объединить два запроса, как это, то также скажите мне, будет ли _score комбинацией двух или нет.

Я пытаюсь сделать запрос следующим образом:

GET trademark28/_search?explain=true
{
  "size": 100, 
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "tm_applied_for_anan": {
              "query": "7 o' clock",
              "boost": 1
            }
          }
        }
      ]
    }, 
    "intervals" : {
      "tm_applied_for_only_char_without_space" : {
        "all_of" : {
          "intervals" : [
            {
              "match" : {
                "query" : "7 o' clock",
                "max_gaps" : 0
              }
            }
          ]
        }
      }
    }

  }
}

Но этот запрос выдает ошибку.

{
  "error" : {
    "root_cause" : [
      {
        "type" : "parsing_exception",
        "reason" : "[bool] malformed query, expected [END_OBJECT] but found [FIELD_NAME]",
        "line" : 16,
        "col" : 5
      }
    ],
    "type" : "parsing_exception",
    "reason" : "[bool] malformed query, expected [END_OBJECT] but found [FIELD_NAME]",
    "line" : 16,
    "col" : 5
  },
  "status" : 400
}

Но когда я запускаю следующие запросы по отдельности. Они работают отлично.

GET trademark28/_search?explain=true
{
  "size": 100, 
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "tm_applied_for_anan": {
              "query": "7 o' clock",
              "boost": 1
            }
          }
        }
      ]
    }
  }
}

ИЛИ

GET trademark28/_search?explain=true
{
  "size": 100, 
  "query": {
    "intervals" : {
      "tm_applied_for_only_char_without_space" : {
        "all_of" : {
          "intervals" : [
            {
              "match" : {
                "query" : "7 o' clock",
                "max_gaps" : 0
              }
            }
          ]
        }
      }
    }

  }
}

Есть ли способ, которым я могу объединить два типа запросов, как этот?

1 Ответ

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

Оба запроса могут быть объединены с помощью предложения must (AND) или should (OR). Общая оценка основана на выполнении всех запросов. Использование? Объяснение = true показывает сумму баллов по обоим запросам.

GET <index_name>/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "tm_applied_for_anan": {
              "query": "7 o' clock",
              "boost": 1
            }
          }
        },
        {
          "intervals": {
            "tm_applied_for_only_char_without_space": {
              "all_of": {
                "intervals": [
                  {
                    "match": {
                      "query": "7 o' clock",
                      "max_gaps": 0
                    }
                  }
                ]
              }
            }
          }
        }
      ]
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...