Spec-Zone.ru › Elasticsearch 8
›Руководство по Elasticsearch [8.17] ›REST API

API для исследования графов

Справочник по новым API

Для получения самых последних данных об API, обратитесь к API для исследования графов.

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

Самый простой способ понять поведение этого API — использовать графический интерфейс (Graph UI) для исследования связей. Вы можете просмотреть последний запрос, отправленный на _explore конечную точку, в панели Последний запрос. Для получения дополнительной информации, см. Начало работы с Graph.

Для дополнительной информации о работе с API для исследования графов, ознакомьтесь с разделами Graph по устранению неполадок и ограничениями.

API для исследования графов включён по умолчанию. Чтобы отключить доступ к API для исследования графов и графическому интерфейсу Kibana Graph UI, добавьте xpack.graph.enabled: false в elasticsearch.yml.

Запрос

POST <target>/_graph/explore

Описание

Начальный запрос к API _explore содержит запрос-семя, который идентифицирует интересующие документы и указывает поля, определяющие вершины и связи, которые вы хотите включить в граф. Последующие запросы _explore позволяют вам распространять поиск от одной или нескольких интересующих вершин. Вы можете исключить вершины, которые уже были возвращены.

Тело запроса

query

Запрос-семя, который идентифицирует интересующие документы. Может быть любым допустимым запросом Elasticsearch. Например:

"query": {
  "bool": {
    "must": {
      "match": {
        "query.raw": "midi"
      }
    },
    "filter": [
      {
        "range": {
          "query_time": {
            "gte": "2015-10-01 00:00:00"
          }
        }
      }
    ]
  }
}
vertices

Указывает одно или несколько полей, содержащих термины, которые вы хотите включить в граф в качестве вершин. Например:

"vertices": [
  {
    "field": "product"
    }
]
Свойства для vertices
field
Идентифицирует поле в интересующих документах.
include
Идентифицирует интересующие термины, которые образуют начальные точки, от которых вы хотите начать распространение поиска. Вам не нужно указывать запрос-семя, если вы указываете включающий список. Включенный список неявно запрашивает документы, содержащие любые из перечисленных терминов. В дополнение к указанию простого массива строк, вы также можете передавать объекты со значениями term и boost для повышения совпадений по конкретным терминам.
exclude
Список exclude предотвращает включение указанных терминов в результаты.
size
Указывает максимальное количество вершин-терминов, возвращаемых для каждого поля. По умолчанию 5.
min_doc_count
Указывает, сколько документов должно содержать пару терминов, прежде чем она будет считаться полезной связью. Эта настройка действует как порог уверенности. По умолчанию 3.
shard_min_doc_count
Эта расширенная настройка управляет тем, сколько документов на конкретном фрагменте должны содержать пару терминов, прежде чем связь будет возвращена для глобального рассмотрения. По умолчанию 2.
connections

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

"connections": {  
  "vertices": [
    {
      "field": "query.raw"
    }
  ]
}

Связи могут быть вложены внутри объекта connections для исследования дополнительных взаимосвязей в данных. Каждый уровень вложенности рассматривается как шаг, и близость в графе часто описывается в терминах глубины шага.

Свойства для connections
query
Необязательный направляющий запрос, который ограничивает API Graph при исследовании связанных терминов. Например, вы можете направить API Graph игнорировать старые данные, указав запрос, который идентифицирует недавние документы.
vertices

Содержит интересующие вас поля. Например:

"vertices": [
  {
    "field": "query.raw",
    "size": 5,
    "min_doc_count": 10,
    "shard_min_doc_count": 3
  }
]
controls

Управляйте тем, как API Graph строит граф.

Свойства для controls
use_significance
Флаг use_significance фильтрует связанные термины, так что включаются только те, которые существенно связаны с вашим запросом. Для получения информации об алгоритме, используемом для вычисления значимости, см. значимость агрегаций. По умолчанию true.
sample_size
Каждый шаг рассматривает образец из наилучших соответствующих документов на каждом фрагменте. Использование образцов повышает скорость выполнения и сосредотачивает поиск на значимых связанных терминах. Очень маленькие значения (менее 50) могут не предоставить достаточного веса доказательств для определения значимых связей между терминами. Очень большие размеры образцов могут снизить качество результатов и увеличить время выполнения. По умолчанию 100 документов.
timeout
Продолжительность времени в миллисекундах, по истечении которого поиск прекращается, и возвращаются полученные до сих пор результаты. Этот таймаут выполняется с наилучшим результатом. Выполнение может превысить этот таймаут, если, например, произойдет длительная пауза при загрузке FieldData для поля.
sample_diversity

Для предотвращения того, чтобы образец из наилучших соответствующих документов доминировал одним источником результатов, иногда необходимо запросить разнообразие в образце. Вы можете сделать это, выбрав однозначное поле и установив максимальное количество документов на значение для этого поля. Например:

"sample_diversity": {
  "field": "category.raw",
  "max_docs_per_value": 500
}

Примеры

Основные исследования

Поиск обычно начинается с запроса для идентификации тесно связанных терминов.

resp = client.graph.explore(
    index="clicklogs",
    query={
        "match": {
            "query.raw": "midi"
        }
    },
    vertices=[
        {
            "field": "product"
        }
    ],
    connections={
        "vertices": [
            {
                "field": "query.raw"
            }
        ]
    },
)
print(resp)
const response = await client.graph.explore({
  index: "clicklogs",
  query: {
    match: {
      "query.raw": "midi",
    },
  },
  vertices: [
    {
      field: "product",
    },
  ],
  connections: {
    vertices: [
      {
        field: "query.raw",
      },
    ],
  },
});
console.log(response);
POST clicklogs/_graph/explore
{
  "query": {                  
    "match": {
      "query.raw": "midi"
    }
  },
  "vertices": [               
    {
      "field": "product"
    }
  ],
  "connections": {            
    "vertices": [
      {
        "field": "query.raw"
      }
    ]
  }
}

Инициализировать исследование с помощью запроса. В этом примере выполняется поиск в журнале кликов для людей, искавших термин «midi».

Определить вершины для включения в граф. В этом примере ищут кода продуктов, которые существенно связаны с поисками «midi».

Найти связи. В этом примере ищут другие поисковые запросы, которые привели людей к нажатию на продукты, связанные с поисками «midi».

Ответ от API для исследования графов выглядит следующим образом:

{
   "took": 0,
   "timed_out": false,
   "failures": [],
   "vertices": [ 
      {
         "field": "query.raw",
         "term": "midi cable",
         "weight": 0.08745858139552132,
         "depth": 1
      },
      {
         "field": "product",
         "term": "8567446",
         "weight": 0.13247784285434397,
         "depth": 0
      },
      {
         "field": "product",
         "term": "1112375",
         "weight": 0.018600718471158982,
         "depth": 0
      },
      {
         "field": "query.raw",
         "term": "midi keyboard",
         "weight": 0.04802242866755111,
         "depth": 1
      }
   ],
   "connections": [ 
      {
         "source": 0,
         "target": 1,
         "weight": 0.04802242866755111,
         "doc_count": 13
      },
      {
         "source": 2,
         "target": 3,
         "weight": 0.08120623870976627,
         "doc_count": 23
      }
   ]
}

Массив всех найденных вершин. Вершина — это индексированный термин, поэтому предоставляются поле и значение термина. Атрибут weight указывает значение значимости. Атрибут depth указывает уровень шага, на котором термин был впервые встречен.

Связи между вершинами в массиве. Свойства source и target индексируются в массив вершин и указывают, какой термин вершины привел к другому в ходе исследования. Значение doc_count указывает, сколько документов в наборе образцов содержат эту пару терминов (это не глобальное количество для всех документов в потоке данных или индексе).

Дополнительные параметры

Параметры по умолчанию настроены для удаления шумных данных и получения «общей картины» из ваших данных. В этом примере показано, как указать дополнительные параметры для влияния на построение графа.

Советы по настройке параметров для более подробной экспертной оценки, где каждый документ может быть интересен, см. в руководстве по устранению неполадок.

resp = client.graph.explore(
    index="clicklogs",
    query={
        "match": {
            "query.raw": "midi"
        }
    },
    controls={
        "use_significance": False,
        "sample_size": 2000,
        "timeout": 2000,
        "sample_diversity": {
            "field": "category.raw",
            "max_docs_per_value": 500
        }
    },
    vertices=[
        {
            "field": "product",
            "size": 5,
            "min_doc_count": 10,
            "shard_min_doc_count": 3
        }
    ],
    connections={
        "query": {
            "bool": {
                "filter": [
                    {
                        "range": {
                            "query_time": {
                                "gte": "2015-10-01 00:00:00"
                            }
                        }
                    }
                ]
            }
        },
        "vertices": [
            {
                "field": "query.raw",
                "size": 5,
                "min_doc_count": 10,
                "shard_min_doc_count": 3
            }
        ]
    },
)
print(resp)
const response = await client.graph.explore({
  index: "clicklogs",
  query: {
    match: {
      "query.raw": "midi",
    },
  },
  controls: {
    use_significance: false,
    sample_size: 2000,
    timeout: 2000,
    sample_diversity: {
      field: "category.raw",
      max_docs_per_value: 500,
    },
  },
  vertices: [
    {
      field: "product",
      size: 5,
      min_doc_count: 10,
      shard_min_doc_count: 3,
    },
  ],
  connections: {
    query: {
      bool: {
        filter: [
          {
            range: {
              query_time: {
                gte: "2015-10-01 00:00:00",
              },
            },
          },
        ],
      },
    },
    vertices: [
      {
        field: "query.raw",
        size: 5,
        min_doc_count: 10,
        shard_min_doc_count: 3,
      },
    ],
  },
});
console.log(response);
POST clicklogs/_graph/explore
{
  "query": {
    "match": {
      "query.raw": "midi"
    }
  },
  "controls": {
    "use_significance": false,        
    "sample_size": 2000,              
    "timeout": 2000,                  
    "sample_diversity": {             
      "field": "category.raw",
      "max_docs_per_value": 500
    }
  },
  "vertices": [
    {
      "field": "product",
      "size": 5,                      
      "min_doc_count": 10,            
      "shard_min_doc_count": 3        
    }
  ],
  "connections": {
    "query": {                        
      "bool": {
        "filter": [
          {
            "range": {
              "query_time": {
                "gte": "2015-10-01 00:00:00"
              }
            }
          }
        ]
      }
    },
    "vertices": [
      {
        "field": "query.raw",
        "size": 5,
        "min_doc_count": 10,
        "shard_min_doc_count": 3
      }
    ]
  }
}

Отключить use_significance, чтобы включить все связанные термины, а не только те, которые существенно связаны с запросом.

Увеличьте размер выборки, чтобы рассмотреть больший набор документов на каждом фрагменте.

Ограничьте время выполнения запроса графа перед возвратом результатов.

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

Управляйте максимальным количеством возвращаемых вершинных терминов для каждого поля.

Установите порог достоверности, который указывает, сколько документов должны содержать пару терминов, прежде чем мы рассмотрим её как полезное соединение.

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

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

Операции паутинирования

После начального поиска вы обычно хотите выбрать вершины, которые вас интересуют, и увидеть, какие дополнительные вершины с ними связаны. В терминологии графов эта операция называется "паутинированием". Отправляя серию запросов, вы можете постепенно построить граф связанной информации.

Для паутинирования вам нужно указать две вещи:

  • Набор вершин, для которых вы хотите найти дополнительные связи
  • Набор вершин, о которых вы уже знаете, которые вы хотите исключить из результатов операции паутинирования.

Вы указываете эту информацию с помощью include и exclude пунктов. Например, следующий запрос начинается с продукта 1854873 и паутинирует, чтобы найти дополнительные поисковые термины, связанные с этим продуктом. Термины "midi", "midi keyboard" и "synth" исключаются из результатов.

resp = client.graph.explore(
    index="clicklogs",
    vertices=[
        {
            "field": "product",
            "include": [
                "1854873"
            ]
        }
    ],
    connections={
        "vertices": [
            {
                "field": "query.raw",
                "exclude": [
                    "midi keyboard",
                    "midi",
                    "synth"
                ]
            }
        ]
    },
)
print(resp)
const response = await client.graph.explore({
  index: "clicklogs",
  vertices: [
    {
      field: "product",
      include: ["1854873"],
    },
  ],
  connections: {
    vertices: [
      {
        field: "query.raw",
        exclude: ["midi keyboard", "midi", "synth"],
      },
    ],
  },
});
console.log(response);
POST clicklogs/_graph/explore
{
   "vertices": [
      {
         "field": "product",
         "include": [ "1854873" ] 
      }
   ],
   "connections": {
      "vertices": [
         {
            "field": "query.raw",
            "exclude": [ 
               "midi keyboard",
               "midi",
               "synth"
            ]
         }
      ]
   }
}

Вершины, с которых вы хотите начать, задаются как массив терминов в пункте include.

Пункт exclude предотвращает включение в результаты терминов, о которых вы уже знаете.

© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/graph-explore-api.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API