Как сопоставить один из множества терминов запроса? - PullRequest
0 голосов
/ 27 сентября 2019

Допустим, у меня есть язык запросов, который анализирует запросы "естественного" языка в упругих поисковых запросах.

Предполагая, что у нас есть следующий запрос:

(type == "my-type" || device_id == "some-device-id") && id == "123456789"

Как мне добиться этого вЭластичный поиск?

Я пробовал с:

{
    "bool": {
        "filter": {
            "term": {
                "id": "123456789"
            }
        },
        "should": [
            {
                "term": {
                    "type": "my-type"
                }
            },
            {
                "term": {
                    "device_id": "some-device-id"
                }
            }
        ]
    }
}

но это не то, что я хочу.

Что я делаю не так?

Картография:

{
    "mappings": {
        "_doc": {
            "properties": {
                "accepted_at":  {
                    "type": "date",
                    "format": "strict_date_optional_time||date_time||epoch_millis"
                },
                "created_at":   {
                    "type": "date",
                    "format": "strict_date_optional_time||date_time||epoch_millis"
                },
                "device_id":    {"type": "keyword"},
                "id":       {"type": "keyword"},
                "location": {"type": "geo_point"},
                "message_id":   {"type": "keyword"},
                "type":     {"type": "keyword"}
            }
        }
    }
}

1 Ответ

0 голосов
/ 27 сентября 2019

Вasticsearch вы можете думать о && как must и || как следует в запросе bool , так что вы можете перевести этот запрос

(type == "my-type" || device_id == "some-device-id") && id == "123456789"

as

must(should(type == "my-type"),(device_id == "some-device-id"), id == "123456789")

, который дает нам этот запрос, когда мы хотим преобразовать его вasticsearch DSL

{
  "query": {
    "bool": {
      "must": [
        {
          "bool": {
            "should": [
              {
                "term": {
                  "type": {
                    "value": "my-type"
                  }
                }
              },
              {
                "term": {
                  "device_id": {
                    "value": "some-device-id"
                  }
                }
              }
            ]
          }
        },
        {
          "term": {
            "id": {
              "value": "123456789"
            }
          }
        }
      ]
    }
  }
}

Надеюсь, что поможет.

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