Как построить И условие между должен и должен elasti c поиск bool запрос - PullRequest
0 голосов
/ 25 марта 2020

Вот пример документа USER

{
  "id" : "1234567",
  "userId" : "testuser01",
  "firstName" : "firstname",
  "lastName" : "lastname",
  "orgId" : "567890",
  "phoneNumber" : "1234567890"
}

Я хочу создать поисковый запрос, в который я хочу включить всех тех пользователей, которые принадлежат определенному orgId И который соответствует поиску текст, введенный пользователем в любое из полей (userId, firstname, et c.)

ex. если поиск выполняется с использованием текста " first ", я хочу получить все те записи, которые принадлежат конкретным полям orgId AND, в которых содержится first .

Пример запроса I я пытаюсь это

    "query" : {
    "bool" : {
      "must" : [
        {
          "term" : {
            "orgId.keyword" : {
              "value" : "567890",
              "boost" : 1.0
            }
          }
        }
      ],
      "should" : [
        {
          "simple_query_string" : {
            "query" : "first*",
            "fields" : [
              "lastName^1.0"
            ],
            "flags" : -1,
            "default_operator" : "or",
            "lenient" : false,
            "analyze_wildcard" : true,
            "boost" : 1.0
          }
        },
        {
          "simple_query_string" : {
            "query" : "first*",
            "fields" : [
              "userId^1.0"
            ],
            "flags" : -1,
            "default_operator" : "or",
            "lenient" : false,
            "analyze_wildcard" : true,
            "boost" : 1.0
          }
        },
        {
          "simple_query_string" : {
            "query" : "first*",
            "fields" : [
              "orgId^1.0"
            ],
            "flags" : -1,
            "default_operator" : "or",
            "lenient" : false,
            "analyze_wildcard" : true,
            "boost" : 1.0
          }
        },
        {
          "simple_query_string" : {
            "query" : "first*",
            "fields" : [
              "firstName^1.0"
            ],
            "flags" : -1,
            "default_operator" : "or",
            "lenient" : false,
            "analyze_wildcard" : true,
            "boost" : 1.0
          }
        },
        {
          "simple_query_string" : {
            "query" : "first*",
            "fields" : [
              "phoneNumber^1.0"
            ],
            "flags" : -1,
            "default_operator" : "or",
            "lenient" : false,
            "analyze_wildcard" : true,
            "boost" : 1.0
          }
        },
        {
          "simple_query_string" : {
            "query" : "first*",
            "fields" : [
              "id^1.0"
            ],
            "flags" : -1,
            "default_operator" : "or",
            "lenient" : false,
            "analyze_wildcard" : true,
            "boost" : 1.0
          }
        }
      ],
      "disable_coord" : false,
      "adjust_pure_negative" : true,
      "boost" : 1.0
    }
  },
  "sort" : [
    {
      "userId.keyword" : {
        "order" : "asc"
      }
    }
  ]
}

Проблема, с которой я сталкиваюсь, это то, что я хочу иметь И условие между ДОЛЖНО и ДОЛЖНО.

1 Ответ

0 голосов
/ 25 марта 2020

Вам не нужно указывать запрос для каждого поля в запросе query_string. Скорее вы можете указать список полей, как показано ниже:

{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "orgId.keyword": {
              "value": "567890",
              "boost": 1
            }
          }
        },
        {
          "simple_query_string": {
            "query": "first*",
            "fields": [
              "lastName^1.0",
              "userId^1.0",
              "orgId^1.0",
              "firstName^1.0",
              "phoneNumber^1.0",
              "id^1.0"
            ]
          }
        }
      ]
    }
  },
  "sort": [
    {
      "userId.keyword": {
        "order": "asc"
      }
    }
  ]
}

Также, чтобы ответить

Как построить условие И между и должно ли эласта c поиск bool запрос?

вот пример запроса для этого:

{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "field1": "someval"
          }
        },
        {
          "bool": {
            "should": [
              {
                "terms": {
                  "field2": [
                    "v1",
                    "v2"
                  ]
                }
              },
              {
                "query_string": {
                  "query": "this AND that OR thus"
                }
              }
            ]
          }
        }
      ]
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...