Запрос на поиск эластичности, где значение ключа равно как минимум некоторому числу - PullRequest
0 голосов
/ 28 апреля 2019

Я обрабатываю файлы, чтобы определить, содержат ли они метки и насколько достоверно метка была распознана.

Я создал отображение nested под названием tags, которое содержит label (текст) и confidence (с плавающей точкой от 0 до 100).

Вот пример того, как я думаю, что запрос будет работать (я знаю, что он недействителен).Это должно быть что-то вроде «Найти документы с тегами, помеченными A и B. У доверия должно быть не менее 37, а у B - не менее 80».

{
  "query": {
    "nested": {
      "path": "tags",
      "query": {
        "bool": {
          "must": [
            {
              "match": {
                "tags.label": "A"
              },
              "range": {
                "tags.confidence": {
                  "gte": 37
                }
              }
            },
            {
              "match": {
                "tags.label": "B"
              },
              "range": {
                "tags.confidence": {
                  "gte": 80
                }
              }
            }
          ]
        }
      }
    }
  }
}

Любые идеи?Я почти уверен, что мне нужно подходить к этому по-другому (другое отображение).Я не уверен, как это сделать в ElasticSearch.Это возможно?

1 Ответ

2 голосов
/ 28 апреля 2019

Допустим, ваш родительский документ будет содержать два вложенных документа, что-то вроде следующего:

{  
   "tags":[  
      {  
         "label":"A",
         "confidence":40
      },
      {  
         "label":"B",
         "confidence":85
      }
   ]
}

В таком случае ваш запрос будет выглядеть следующим образом:

Вложенный запрос:

POST <your_index_name>/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "nested": {
            "path": "tags",
            "query": {
              "bool": {
                "must": [
                  {
                    "match": {
                      "tags.label": "A"
                    }
                  },
                  {
                    "range": {
                      "tags.confidence": {
                        "gte": 37
                      }
                    }
                  }
                ]
              }
            }
          }
        },
        {
          "nested": {
            "path": "tags",
            "query": {
              "bool": {
                "must": [
                  {
                    "match": {
                      "tags.label": "B"
                    }
                  },
                  {
                    "range": {
                      "tags.confidence": {
                        "gte": 80
                      }
                    }
                  }
                ]
              }
            }
          }
        }
      ]
    }
  }
}

Обратите внимание, что каждый вложенный документ индексируется как отдельный документ.Вот почему вы должны упомянуть два отдельных запроса.В противном случае, с тем, что у вас есть, он будет искать все четыре значения в одном / одном вложенном документе своего родительского документа.

Надеюсь, это поможет!

...