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
}
]
} | Массив всех найденных вершин. Вершина — это индексированный термин, поэтому предоставляются поле и значение термина. Атрибут | |
| Связи между вершинами в массиве. Свойства |
Дополнительные параметры
Параметры по умолчанию настроены для удаления шумных данных и получения «общей картины» из ваших данных. В этом примере показано, как указать дополнительные параметры для влияния на построение графа.
Советы по настройке параметров для более подробной экспертной оценки, где каждый документ может быть интересен, см. в руководстве по устранению неполадок.
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
}
]
}
} | Отключить | |
| Увеличьте размер выборки, чтобы рассмотреть больший набор документов на каждом фрагменте. | |
| Ограничьте время выполнения запроса графа перед возвратом результатов. | |
| Обеспечьте разнообразие в выборке, установив ограничение на количество документов на значение в определенном поле с одиночным значением, например, поле категории. | |
| Управляйте максимальным количеством возвращаемых вершинных терминов для каждого поля. | |
| Установите порог достоверности, который указывает, сколько документов должны содержать пару терминов, прежде чем мы рассмотрим её как полезное соединение. | |
| Укажите, сколько документов на фрагменте должно содержать пару терминов, прежде чем соединение будет возвращено для глобального рассмотрения. | |
| Ограничьте, какие документы рассматриваются при исследовании связанных терминов. |
Операции паутинирования
После начального поиска вы обычно хотите выбрать вершины, которые вас интересуют, и увидеть, какие дополнительные вершины с ними связаны. В терминологии графов эта операция называется "паутинированием". Отправляя серию запросов, вы можете постепенно построить граф связанной информации.
Для паутинирования вам нужно указать две вещи:
- Набор вершин, для которых вы хотите найти дополнительные связи
- Набор вершин, о которых вы уже знаете, которые вы хотите исключить из результатов операции паутинирования.
Вы указываете эту информацию с помощью 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"
]
}
]
}
} | Вершины, с которых вы хотите начать, задаются как массив терминов в пункте | |
| Пункт |
© 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