Skip to main content

SearchFilters de base de conocimientos

La API Retrieve devuelve segmentos de texto de una base de conocimientos basándose en la similitud semántica. Cuando la búsqueda semántica devuelve demasiados resultados irrelevantes, utilice SearchFilters para aplicar un filtrado basado en metadatos sobre los resultados semánticos. Esto es eficaz para datos estructurados, como tablas de datos con campos bien definidos.

Cómo funciona SearchFilters

Sin SearchFilters, la API Retrieve devuelve todos los segmentos de texto semánticamente similares, lo cual puede incluir coincidencias irrelevantes. SearchFilters realiza primero una búsqueda semántica y luego filtra los resultados según las condiciones de campo. Sin SearchFilters:
{
  "indexId": "o73yjlxxxx",
  "query": "Employees in the company named San Zhang"
}
La recuperación semántica devuelve segmentos de texto que no son altamente relevantes para "San Zhang".
imagen
Con SearchFilters:
{
  "indexId": "o73yjlxxxx",
  "query": "Employees in the company named San Zhang",
  "searchFilters": [
    {
      "Name": "San Zhang"
    }
  ]
}
SearchFilters elimina de los resultados semánticos los segmentos de texto que no coinciden con Name: "San Zhang".
imagen

Sintaxis

SearchFilters es un arreglo de subgrupos. Cada subgrupo es un objeto JSON con uno o más pares field: value. Los subgrupos siempre se combinan con lógica AND.
{
  "searchFilters": [
    {
      "Name": "San Zhang",
      "Sex": "Male"
    },
    {
      "Position": "Engineer"
    }
  ]
}
En este ejemplo, los resultados deben coincidir con Name = "San Zhang" Y Sex = "Male" (dentro del subgrupo 1) Y Position = "Engineer" (subgrupo 2).

Tipos de consulta compatibles

Referencia de operadores

Tipo de consultaOperadorTipos de campo compatiblesDescripción
Valor único*(valor directo)*cadena, numérico (long, double)Coincidir con un solo valor exacto. Ejemplo: {"Name": "San Zhang"}
Valor múltiple*(matriz JSON)*matriz de cadenas, matriz numéricaCoincidir con cualquier valor en el arreglo (similar a SQL IN). Ejemplo: {"Name": "[\"San Zhang\",\"Si Li\"]"}
Igualdadeqcadena, numéricoIgual a. Ejemplo: {"Name": {"eq": "San Zhang"}}
Igualdadneqcadena, numéricoNo igual a. Ejemplo: {"Name": {"neq": "San Zhang"}}
IntervalogtnuméricoMayor que. Ejemplo: {"Age": {"gt": 20}}
IntervalogtenuméricoMayor o igual a. Ejemplo: {"Age": {"gte": 20}}
IntervaloltnuméricoMenor que. Ejemplo: {"Age": {"lt": 30}}
IntervaloltenuméricoMenor o igual a. Ejemplo: {"Age": {"lte": 30}}
DifusolikestringCoincidencia de patrón con comodines. Ejemplo: {"Position": {"like": "E%r"}}
Etiquetatagsmatriz de cadenasFiltrar por etiquetas de documento (solo bases de conocimientos de búsqueda de documentos). Ejemplo: {"tags": "[\"tag1\",\"tag2\"]"}
Las consultas de igualdad e intervalo son subtipos de consulta por rango. Las consultas de igualdad no distinguen mayúsculas de minúsculas y aceptan solo valores únicos por campo.

Caracteres comodín para consultas difusas

CarácterDescripciónEjemplo
%Coincide con cero o más caracteresE%r coincide con Engineer
_Coincide exactamente con un carácterE_gineer coincide con Engineer

Lógica de consulta por etiquetas

  • Múltiples etiquetas en un subgrupo usan lógica OR: se devuelven los archivos que coinciden con cualquier etiqueta.
  • Para lógica AND entre etiquetas, coloque cada etiqueta en un subgrupo separado.

Requisitos previos

Necesita:
Los usuarios RAM solo pueden gestionar bases de conocimientos en los espacios de trabajo a los que se han unido. Las cuentas de Alibaba Cloud pueden gestionar todos los espacios de trabajo.

Configuración de datos de muestra

Los ejemplos utilizan EmployeeInformation.xlsx (3 registros). Cree una base de conocimientos con:
ConfiguraciónValor
Tipo de base de conocimientosConsulta de datos
Fuente de datosCargar tabla de datos
CamposName (string), Sex (string), Position (string), Age (double)
Configuración de índicesTodos los campos utilizados para la recuperación y las respuestas del modelo
imagen

Ejemplos de código completos

Los siguientes ejemplos en Python y Java cubren todos los tipos de consulta.
Antes de ejecutar el código de muestra, configure su AccessKey y AccessKey secret como variables de entorno.
  • Python
  • Java
# The sample code is for reference only. Do not use it in a production environment.
import json
import os
import sys
from typing import List

from alibabacloud_bailian20231229 import models as bailian_20231229_models
from alibabacloud_bailian20231229.client import Client as bailian20231229Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_tea_util.client import Client as UtilClient

class SearchFiltersFullExample:
    class QueryObject:
        def __init__(self, prefix):
            self.like = prefix

        def to_dict(self):
            return {
                "like": self.like
            }

    class Range:
        def __init__(self, gte, lte):
            self.gte = gte
            self.lte = lte

        def to_dict(self):
            return {
                "gte": self.gte,
                "lte": self.lte
            }

    def __init__(self):
        pass

    @staticmethod
    def create_client() -> bailian20231229Client:
        """
        Initializes a client using an AccessKey pair.
        @return: Client
        @throws Exception
        """
        # For production, use STS or other secure credential management. See https://www.alibabacloud.com/help/sdk/developer-reference/v2-manage-access-credentials
        config = open_api_models.Config(
            # Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is set.
            access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            # Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is set.
            access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        )
        # For more information about endpoints, see https://www.alibabacloud.com/help/model-studio/api-bailian-2023-12-29-endpoint
        config.endpoint = f'bailian.ap-southeast-1.aliyuncs.com'
        return bailian20231229Client(config)

    @staticmethod
    def sub_group_query() -> None:
        try:
            client = SearchFiltersFullExample.create_client()
            # Create a retrieve_request object.
            retrieve_request = bailian_20231229_models.RetrieveRequest()
            # Required. You can enter the actual prompt.
            retrieve_request.query = 'Employees in the company named San Zhang'
            # Required. Enter the actual knowledge base ID.
            retrieve_request.index_id = 'Enter the actual knowledge base ID'
            # Group 1: Name = "San Zhang", Group 2: Sex = "Female"
            retrieve_request.search_filters = [
                {"Name": "San Zhang"},
                {"Sex": "Female"}
            ]
            # Perform a retrieval. Enter the workspace ID and the retrieve_request object.
            resp = client.retrieve('Enter the actual workspace ID', retrieve_request)
            print(UtilClient.to_jsonstring(resp))
        except Exception as error:
            # Handle exceptions appropriately in production
            print(error.message)

    @staticmethod
    def single_query() -> None:
        try:
            client = SearchFiltersFullExample.create_client()
            # Create a retrieve_request object.
            retrieve_request = bailian_20231229_models.RetrieveRequest()
            # Required. You can enter the actual prompt.
            retrieve_request.query = 'Employees in the company named San Zhang'
            # Required. Enter the actual knowledge base ID.
            retrieve_request.index_id = 'Enter the actual knowledge base ID'
            # Single-value filter: Name = "San Zhang"
            retrieve_request.search_filters = [
                {"Name": "San Zhang"}
            ]
            # Perform a retrieval. Enter the workspace ID and the retrieve_request object.
            resp = client.retrieve('Enter the actual workspace ID', retrieve_request)
            print(UtilClient.to_jsonstring(resp.body))
        except Exception as error:
            # Handle exceptions appropriately in production
            print(error.message)

    @staticmethod
    def multi_query() -> None:
        try:
            client = SearchFiltersFullExample.create_client()
            # Create a retrieve_request object.
            retrieve_request = bailian_20231229_models.RetrieveRequest()
            # Required. You can enter the actual prompt.
            retrieve_request.query = 'All employees in the company'
            # Required. Enter the actual knowledge base ID.
            retrieve_request.index_id = 'Enter the actual knowledge base ID'
            # Create a list to store multiple values.
            names = ["San Zhang", "Si Li"]
            # Multi-value filter: Name IN ["San Zhang", "Si Li"]
            retrieve_request.search_filters = [{"Name": json.dumps(names)}]
            # Perform a retrieval. Enter the workspace ID and the retrieve_request object.
            resp = client.retrieve('Enter the actual workspace ID', retrieve_request)
            print(UtilClient.to_jsonstring(resp.body))
        except Exception as error:
            # Handle exceptions appropriately in production
            print(error.message)

    @staticmethod
    def range_query() -> None:
        try:
            client = SearchFiltersFullExample.create_client()
            # Create a retrieve_request object.
            retrieve_request = bailian_20231229_models.RetrieveRequest()
            # Required. You can enter the actual prompt.
            retrieve_request.query = 'All employees in the company'
            # Required. Enter the actual knowledge base ID.
            retrieve_request.index_id = 'Enter the actual knowledge base ID'
            # Range filter: Age
            age_range = SearchFiltersFullExample.Range(20, 27)
            retrieve_request.search_filters = [
                {"Position": "Engineer"},  # Group 1: Position filter condition
                {"Age": json.dumps(age_range.to_dict())}  # Group 2: Age range filter condition
            ]
            # Perform a retrieval. Enter the workspace ID and the retrieve_request object.
            resp = client.retrieve('Enter the actual workspace ID', retrieve_request)
            print(UtilClient.to_jsonstring(resp.body))
        except Exception as error:
            # Handle exceptions appropriately in production
            print(error.message)

    @staticmethod
    def wildcard_query() -> None:
        try:
            client = SearchFiltersFullExample.create_client()
            # Create a retrieve_request object.
            retrieve_request = bailian_20231229_models.RetrieveRequest()
            # Required. You can enter the actual prompt.
            retrieve_request.query = 'Male employees in the company'
            # Required. Enter the actual knowledge base ID.
            retrieve_request.index_id = 'Enter the actual knowledge base ID'
            # Fuzzy filter: Position LIKE "E%r" (% = zero or more chars)
            position = SearchFiltersFullExample.QueryObject('E%r')
            retrieve_request.search_filters = [
                {"Name": "San Zhang"},  # Name filter condition. You can replace it with the actual property and value.
                {"Position": json.dumps(position.to_dict())}  # Position (fuzzy query) filter condition. You can replace it with the actual property and value.
            ]
            # Perform a retrieval. Enter the workspace ID and the retrieve_request object.
            resp = client.retrieve('Enter the actual workspace ID', retrieve_request)
            print(UtilClient.to_jsonstring(resp.body))
        except Exception as error:
            # Handle exceptions appropriately in production
            print(error.message)

    @staticmethod
    def tag_query() -> None:
        try:
            client = SearchFiltersFullExample.create_client()
            # Create a retrieve_request object.
            retrieve_request = bailian_20231229_models.RetrieveRequest()
            # Required. You can enter the actual prompt.
            retrieve_request.query = 'Provide some candidates'
            # Required. Enter the actual knowledge base ID.
            retrieve_request.index_id = 'Enter the actual knowledge base ID'
            # Tag filter (OR logic within array)
            tags = ["University A", "Student Union President"]
            retrieve_request.search_filters = [
                {"tags": json.dumps(tags)}
            ]
            # Perform a retrieval. Enter the workspace ID and the retrieve_request object.
            resp = client.retrieve('Enter the actual workspace ID', retrieve_request)
            print(UtilClient.to_jsonstring(resp.body))
        except Exception as error:
            # Handle exceptions appropriately in production
            print(error.message)

    @staticmethod
    def tag_query2() -> None:
        try:
            client = SearchFiltersFullExample.create_client()
            # Create a retrieve_request object.
            retrieve_request = bailian_20231229_models.RetrieveRequest()
            # Required. You can enter the actual prompt.
            retrieve_request.query = 'Provide some candidates'
            # Required. Enter the actual knowledge base ID.
            retrieve_request.index_id = 'Enter the actual knowledge base ID'
            # Tag filters (AND logic between groups)
            tag1 = ["University A"]
            tag2 = ["Sports Specialist Student"]
            retrieve_request.search_filters = [
                {"tags": json.dumps(tag1)},
                {"tags": json.dumps(tag2)}
            ]
            # Perform a retrieval. Enter the workspace ID and the retrieve_request object.
            resp = client.retrieve('Enter the actual workspace ID', retrieve_request)
            print(UtilClient.to_jsonstring(resp.body))
        except Exception as error:
            # Handle exceptions appropriately in production
            print(error.message)

    @staticmethod
    def main(args: List[str]) -> None:
        SearchFiltersFullExample.sub_group_query()
        SearchFiltersFullExample.single_query()
        SearchFiltersFullExample.multi_query()
        SearchFiltersFullExample.range_query()
        SearchFiltersFullExample.wildcard_query()
        SearchFiltersFullExample.tag_query()
        SearchFiltersFullExample.tag_query2()

if __name__ == '__main__':
    SearchFiltersFullExample.main(sys.argv[1:])

Ejemplos de tipos de consulta

Cada tipo de consulta incluye sintaxis JSON y ejemplos de solicitud/respuesta. Reemplace estos marcadores de posición con sus valores reales:
Marcador de posiciónDescripciónEjemplo
<knowledge-base-id>ID de índice de base de conocimientos27ubwxxxxx
<workspace-id>ID de espacio de trabajollm-4u5xpd1xdjxxxxxx

Consulta por subgrupo

Cada elemento en el arreglo searchFilters es un subgrupo que combina condiciones de filtro. Todos los subgrupos deben coincidir (lógica AND). Filtrar registros donde Name es "San Zhang" Y Sex es "Female":
{
  "searchFilters": [
    {
      "Name": "San Zhang"
    },
    {
      "Sex": "Female"
    }
  ]
}
Ningún registro coincide con ambas condiciones, por lo que nodes está vacío.
  • Python
  • Java
# The sample code is for reference only. Do not use it in a production environment.
import os
import sys
from typing import List

from alibabacloud_bailian20231229 import models as bailian_20231229_models
from alibabacloud_bailian20231229.client import Client as bailian20231229Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_tea_util.client import Client as UtilClient

class SubGroupQueryExample:
    def __init__(self):
        pass

    @staticmethod
    def create_client() -> bailian20231229Client:
        """
        Initializes a client using an AccessKey pair.
        @return: Client
        @throws Exception
        """
        # For production, use STS or other secure credential management. See https://www.alibabacloud.com/help/sdk/developer-reference/v2-manage-access-credentials
        config = open_api_models.Config(
            # Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is set.
            access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            # Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is set.
            access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        )
        # For more information about endpoints, see https://www.alibabacloud.com/help/model-studio/api-bailian-2023-12-29-endpoint
        config.endpoint = f'bailian.ap-southeast-1.aliyuncs.com'
        return bailian20231229Client(config)

    @staticmethod
    def main(
            args: List[str],
    ) -> None:
        try:
            client = SubGroupQueryExample.create_client()
            # Create a retrieve_request object.
            retrieve_request = bailian_20231229_models.RetrieveRequest()
            # Required. You can enter the actual prompt.
            retrieve_request.query = 'Employees in the company named San Zhang'
            # Required. Enter the actual knowledge base ID.
            retrieve_request.index_id = 'Enter the actual knowledge base ID'
            # Group 1: Name = "San Zhang", Group 2: Sex = "Female"
            retrieve_request.search_filters = [
                {"Name": "San Zhang"},
                {"Sex": "Female"}
            ]
            # Perform a retrieval. Enter the workspace ID and the retrieve_request object.
            resp = client.retrieve('Enter the actual workspace ID', retrieve_request)
            print(UtilClient.to_jsonstring(resp))
        except Exception as error:
            # Handle exceptions appropriately in production
            print(error.message)

if __name__ == '__main__':
    SubGroupQueryExample.main(sys.argv[1:])
Parámetros de solicitud
{
  "indexId": "27ubwxxxxx",
  "WorkspaceId":"llm-4u5xpd1xdjxxxxxx",
  "query": "Employees in the company named San Zhang",
  "searchFilters": [
    {
      "Name": "San Zhang"
    },
    {
      "Sex": "Female"
    }
  ]
}
Parámetros de respuesta
{
  "code": "Success",
  "data": {
    "nodes": []
  },
  "message": "success",
  "requestId": "5BA30772-xxxx-560C-B1F7-C1DA737A9D80",
  "status": "200",
  "success": true
}

Consulta de valor único

Pase un solo valor para un campo con el fin de coincidir con registros que tengan ese valor exacto. Filtrar registros donde Name es "San Zhang":
{
  "searchFilters": [
    {
      "Name": "San Zhang"
    }
  ]
}
  • Python
  • Java
# The sample code is for reference only. Do not use it in a production environment.
import os
import sys
from typing import List

from alibabacloud_bailian20231229 import models as bailian_20231229_models
from alibabacloud_bailian20231229.client import Client as bailian20231229Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_tea_util.client import Client as UtilClient

class SingleQueryExample:
    def __init__(self):
        pass

    @staticmethod
    def create_client() -> bailian20231229Client:
        """
        Initializes a client using an AccessKey pair.
        @return: Client
        @throws Exception
        """
        # For production, use STS or other secure credential management. See https://www.alibabacloud.com/help/sdk/developer-reference/v2-manage-access-credentials
        config = open_api_models.Config(
            # Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is set.
            access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            # Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is set.
            access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        )
        # For more information about endpoints, see https://www.alibabacloud.com/help/model-studio/api-bailian-2023-12-29-endpoint
        config.endpoint = f'bailian.ap-southeast-1.aliyuncs.com'
        return bailian20231229Client(config)

    @staticmethod
    def main(
            args: List[str],
    ) -> None:
        client = SingleQueryExample.create_client()
        # Create a retrieve_request object.
        retrieve_request = bailian_20231229_models.RetrieveRequest()
        # Required. You can enter the actual prompt.
        retrieve_request.query = 'Employees in the company named San Zhang'
        # Required. Enter the actual knowledge base ID.
        retrieve_request.index_id = 'Enter the actual knowledge base ID'
        # The property for the single-value query is Name and the value is San Zhang. You can replace them with the actual property and value.
        retrieve_request.search_filters = [
            {"Name": "San Zhang"}
        ]
        try:
            # Perform a retrieval. Enter the workspace ID and the retrieve_request object.
            resp = client.retrieve('Enter the actual workspace ID', retrieve_request)
            print(UtilClient.to_jsonstring(resp.body))
        except Exception as error:
            # Handle exceptions appropriately in production
            print(error.message)

if __name__ == '__main__':
    SingleQueryExample.main(sys.argv[1:])
Parámetros de solicitud
{
  "indexId": "27ubwxxxxx",
  "WorkspaceId":"llm-4u5xpd1xdjxxxxxx",
  "query": "Employees in the company named San Zhang",
  "searchFilters": [
    {
      "Name": "San Zhang"
    }
  ]
}
Parámetros de respuesta
{
  "code": "Success",
  "data": {
    "nodes": [
      {
        "metadata": {
          "_rc_v_score": 0.32581159472465515,
          "_q_score": 1,
          "source": "0",
          "_score": 0.4556944966316223,
          "doc_id": "table_xxxx75507aab4bd9a24c18d098b2e8ac_10285263_1",
          "Sex": "Male",
          "_rc_score": 0,
          "Name": "San Zhang",
          "doc_name": "Employee Sheet",
          "_id": "llm-xxxxpd1xdjqp8itj_27ubwxxxxx_table_200275507aab4bd9a24c18d098b2e8ac_10285263_1",
          "Age": "25",
          "Position": "Engineer"
        },
        "score": 0.4556944966316223,
        "text": "Name:San Zhang Age:25 Position:Engineer Sex:Male"
      }
    ]
  },
  "message": "success",
  "requestId": "2FA4113E-xxxx-59C1-BDB2-5B930D8C9B1C",
  "status": "200",
  "success": true
}

Consulta multivalor

Pase múltiples valores para un campo con el fin de coincidir con registros que contengan cualquiera de los valores especificados, similar al operador IN de SQL. Serialice el arreglo de valores como una cadena JSON. Filtrar registros donde Name es "San Zhang" o "Si Li":
{
  "searchFilters": [
    {
      "Name": "[\"San Zhang\",\"Si Li\"]"
    }
  ]
}
  • Python
  • Java
# The sample code is for reference only. Do not use it in a production environment.
import json
import os
import sys
from typing import List

from alibabacloud_bailian20231229 import models as bailian_20231229_models
from alibabacloud_bailian20231229.client import Client as bailian20231229Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_tea_util.client import Client as UtilClient

class MultiQueryExample:
    def __init__(self):
        pass

    @staticmethod
    def create_client() -> bailian20231229Client:
        """
        Initializes a client using an AccessKey pair.
        @return: Client
        @throws Exception
        """
        # For production, use STS or other secure credential management. See https://www.alibabacloud.com/help/sdk/developer-reference/v2-manage-access-credentials
        config = open_api_models.Config(
            # Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is set.
            access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            # Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is set.
            access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        )
        # For more information about endpoints, see https://www.alibabacloud.com/help/model-studio/api-bailian-2023-12-29-endpoint
        config.endpoint = f'bailian.ap-southeast-1.aliyuncs.com'
        return bailian20231229Client(config)

    @staticmethod
    def main(
            args: List[str],
    ) -> None:
        try:
            client = MultiQueryExample.create_client()
            # Create a retrieve_request object.
            retrieve_request = bailian_20231229_models.RetrieveRequest()
            # Required. You can enter the actual prompt.
            retrieve_request.query = 'All employees in the company'
            # Required. Enter the actual knowledge base ID.
            retrieve_request.index_id = 'Enter the actual knowledge base ID'
            # Create a list to store multiple values.
            names = ["San Zhang", "Si Li"]
            # Multi-value filter: Name IN ["San Zhang", "Si Li"]
            retrieve_request.search_filters = [{"Name": json.dumps(names)}]
            # Perform a retrieval. Enter the workspace ID and the retrieve_request object.
            resp = client.retrieve('Enter the actual workspace ID', retrieve_request)
            print(UtilClient.to_jsonstring(resp.body))
        except Exception as error:
            # Handle exceptions appropriately in production
            print(error.message)

if __name__ == '__main__':
    MultiQueryExample.main(sys.argv[1:])
Parámetros de solicitud
{
  "indexId": "27ubwxxxxx",
  "WorkspaceId":"llm-4u5xpd1xdjxxxxxx",
  "query": "All employees in the company",
  "searchFilters": [
    {
      "Name": "[\"San Zhang\",\"Si Li\"]"
    }
  ]
}
Parámetros de respuesta
{
  "code": "Success",
  "data": {
    "nodes": [
      {
        "metadata": {
          "_rc_v_score": 0.3016361088048254,
          "_q_score": 1,
          "source": "0",
          "_score": 0.3322954773902893,
          "doc_id": "table_xxxxad1c331c424780a8023376a73fac_10285263_1",
          "Sex": "Male",
          "_rc_score": 0,
          "Name": "San Zhang",
          "doc_name": "Employee Sheet",
          "_id": "llm-xxxxpd1xdjqp8itj_27ubwxxxxx_table_xxxxad1c331c424780a8023376a73fac_10285263_1",
          "Age": "25.0",
          "Position": "Engineer"
        },
        "score": 0.3322954773902893,
        "text": "Name:San Zhang Age:25.0 Position:Engineer Sex:Male"
      },
      {
        "metadata": {
          "_rc_v_score": 0.2531493306159973,
          "_q_score": 0.8392540654998252,
          "source": "0",
          "_score": 0.25632044672966003,
          "doc_id": "table_xxxxad1c331c424780a8023376a73fac_10285263_2",
          "Sex": "Female",
          "_rc_score": 0,
          "Name": "Si Li",
          "doc_name": "Employee Sheet",
          "_id": "llm-xxxxpd1xdjqp8itj_27ubwxxxxx_table_xxxxad1c331c424780a8023376a73fac_10285263_2",
          "Age": "31.0",
          "Position": "Sales"
        },
        "score": 0.25632044672966003,
        "text": "Name:Si Li Age:31.0 Position:Sales Sex:Female"
      }
    ]
  },
  "message": "success",
  "requestId": "1DFE5E9E-xxxx-5C37-8011-8FA2E2875309",
  "status": "200",
  "success": true
}

Consulta por rango

Utilice consultas por rango para encontrar registros donde un campo numérico cae dentro de un intervalo especificado. Combine consultas por rango con otros tipos de consulta colocándolas en subgrupos separados. Filtrar registros donde Position es "Engineer" (valor único) Y Age está entre 20 y 25 (rango):
{
  "searchFilters": [
    {
      "Position": "Engineer"
    },
    {
      "Age": {
        "gte": 20,
        "lte": 25
      }
    }
  ]
}
  • Python
  • Java
# The sample code is for reference only. Do not use it in a production environment.
import json
import os
import sys
from typing import List

from alibabacloud_bailian20231229 import models as bailian_20231229_models
from alibabacloud_bailian20231229.client import Client as bailian20231229Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_tea_util.client import Client as UtilClient

class RangeQueryExample:
    class Range:
        def __init__(self, gte, lte):
            self.gte = gte
            self.lte = lte

        def to_dict(self):
            return {
                "gte": self.gte,
                "lte": self.lte
            }

    def __init__(self):
        pass

    @staticmethod
    def create_client() -> bailian20231229Client:
        """
        Initializes a client using an AccessKey pair.
        @return: Client
        @throws Exception
        """
        # For production, use STS or other secure credential management. See https://www.alibabacloud.com/help/sdk/developer-reference/v2-manage-access-credentials
        config = open_api_models.Config(
            # Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is set.
            access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            # Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is set.
            access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        )
        # For more information about endpoints, see https://www.alibabacloud.com/help/model-studio/api-bailian-2023-12-29-endpoint
        config.endpoint = f'bailian.ap-southeast-1.aliyuncs.com'
        return bailian20231229Client(config)

    @staticmethod
    def main(
            args: List[str],
    ) -> None:
        try:
            client = RangeQueryExample.create_client()
            # Create a retrieve_request object.
            retrieve_request = bailian_20231229_models.RetrieveRequest()
            # Required. You can enter the actual prompt.
            retrieve_request.query = 'All employees in the company'
            # Required. Enter the actual knowledge base ID.
            retrieve_request.index_id = 'Enter the actual knowledge base ID'
            # Range filter: Age
            age_range = RangeQueryExample.Range(20, 27)
            retrieve_request.search_filters = [
                {"Position": "Engineer"},  # Group 1: Position filter condition
                {"Age": json.dumps(age_range.to_dict())}  # Group 2: Age range filter condition
            ]
            # Perform a retrieval. Enter the workspace ID and the retrieve_request object.
            resp = client.retrieve('Enter the actual workspace ID', retrieve_request)
            print(UtilClient.to_jsonstring(resp.body))
        except Exception as error:
            # Handle exceptions appropriately in production
            print(error.message)

if __name__ == '__main__':
    RangeQueryExample.main(sys.argv[1:])
Parámetros de solicitud
{
  "indexId": "27ubwxxxxx",
  "WorkspaceId":"llm-4u5xpd1xdjxxxxxx",
  "query": "All employees in the company",
  "searchFilters": [
    {
      "Sex": "Male"
    },
    {
      "Age": "{\"gte\":20.0,\"lte\":27.0}"
    }
  ]
}
Parámetros de respuesta
{
  "code": "Success",
  "data": {
    "nodes": [
      {
        "metadata": {
          "_rc_v_score": 0.3016361088048254,
          "_q_score": 1,
          "source": "0",
          "_score": 0.3322954773902893,
          "doc_id": "table_xxxxad1c331c424780a8023376a73fac_10285263_1",
          "Sex": "Male",
          "_rc_score": 0,
          "Name": "San Zhang",
          "doc_name": "Employee Sheet",
          "_id": "llm-xxxxpd1xdjqp8itj_27ubwxxxxx_table_xxxxad1c331c424780a8023376a73fac_10285263_1",
          "Age": "25.0",
          "Position": "Engineer"
        },
        "score": 0.3322954773902893,
        "text": "Name:San Zhang Age:25.0 Position:Engineer Sex:Male"
      }
    ]
  },
  "message": "success",
  "requestId": "AE0B5ABC-xxxx-54A1-9ED4-91865B859DF6",
  "status": "200",
  "success": true
}

Consulta difusa

Utilice patrones de comodines para coincidir parcialmente con campos de cadena, similar al operador LIKE de SQL. Envuelva el patrón en un objeto {"like": "<pattern>"} y serialícelo como una cadena JSON. Filtrar registros donde Name es "San Zhang" Y Position comienza con "E" y termina con "r":
{
  "searchFilters": [
    {
      "Name": "San Zhang"
    },
    {
      "Position": {
        "like": "E%r"
      }
    }
  ]
}
  • Python
  • Java
# The sample code is for reference only. Do not use it in a production environment.
import json
import os
import sys
from typing import List

from alibabacloud_bailian20231229 import models as bailian_20231229_models
from alibabacloud_bailian20231229.client import Client as bailian20231229Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_tea_util.client import Client as UtilClient

class WildcardQueryExample:
    class QueryObject:
        def __init__(self, prefix):
            self.like = prefix

        def to_dict(self):
            return {
                "like": self.like
            }

    def __init__(self):
        pass

    @staticmethod
    def create_client() -> bailian20231229Client:
        """
        Initializes a client using an AccessKey pair.
        @return: Client
        @throws Exception
        """
        # For production, use STS or other secure credential management. See https://www.alibabacloud.com/help/sdk/developer-reference/v2-manage-access-credentials
        config = open_api_models.Config(
            # Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is set.
            access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            # Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is set.
            access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        )
        # For more information about endpoints, see https://www.alibabacloud.com/help/model-studio/api-bailian-2023-12-29-endpoint
        config.endpoint = f'bailian.ap-southeast-1.aliyuncs.com'
        return bailian20231229Client(config)

    @staticmethod
    def main(
            args: List[str],
    ) -> None:
        try:
            client = WildcardQueryExample.create_client()
            # Create a retrieve_request object.
            retrieve_request = bailian_20231229_models.RetrieveRequest()
            # Required. You can enter the actual prompt.
            retrieve_request.query = 'Male employees in the company'
            # Required. Enter the actual knowledge base ID.
            retrieve_request.index_id = 'Enter the actual knowledge base ID'
            # Fuzzy filter: Position LIKE "E%r" (% = zero or more chars)
            position = WildcardQueryExample.QueryObject('E%r')
            retrieve_request.search_filters = [
                {"Name": "San Zhang"},  # Name filter condition. You can replace it with the actual property and value.
                {"Position": json.dumps(position.to_dict())}  # Position (fuzzy query) filter condition. You can replace it with the actual property and value.
            ]
            # Perform a retrieval. Enter the workspace ID and the retrieve_request object.
            resp = client.retrieve('Enter the actual workspace ID', retrieve_request)
            print(UtilClient.to_jsonstring(resp.body))
        except Exception as error:
            # Handle exceptions appropriately in production
            print(error.message)

if __name__ == '__main__':
    WildcardQueryExample.main(sys.argv[1:])
Parámetros de solicitud
{
  "indexId": "27ubwxxxxx",
  "WorkspaceId":"llm-4u5xpd1xdjxxxxxx",
  "query": "Male employees in the company",
  "searchFilters": [
    {
      "Name": "San Zhang"
    },
    {
      "Position": "{\"like\":\"E%r\"}"
    }
  ]
}
Parámetros de respuesta
{
  "code": "Success",
  "data": {
    "nodes": [
      {
        "metadata": {
          "_rc_v_score": 0.41137335930387275,
          "_q_score": 1,
          "source": "0",
          "_score": 0.46098726987838745,
          "doc_id": "table_xxxxad1c331c424780a8023376a73fac_10285263_1",
          "Sex": "Male",
          "_rc_score": 0,
          "Name": "San Zhang",
          "doc_name": "Employee Sheet",
          "_id": "llm-xxxxpd1xdjqp8itj_27ubwxxxxx_table_xxxxad1c331c424780a8023376a73fac_10285263_1",
          "Age": "25.0",
          "Position": "Engineer"
        },
        "score": 0.46098726987838745,
        "text": "Name:San Zhang Age:25.0 Position:Engineer Sex:Male"
      }
    ]
  },
  "message": "success",
  "requestId": "FA759FEC-xxxx-50B7-A64D-BE49A7DF56B8",
  "status": "200",
  "success": true
}

Consulta por etiquetas

Filtrar por etiquetas de documento en una base de conocimientos de búsqueda de documentos. Las etiquetas limitan la recuperación a segmentos de texto de archivos que coinciden con valores de etiqueta específicos. Configuración de muestra: Una base de conocimientos de búsqueda de documentos contiene tres archivos de currículum con las siguientes etiquetas:
ArchivoEtiquetas
Currículum de San ZhangUniversity A, Sports Specialist Student
Currículum de Si LiUniversity B
Currículum de Wu WangUniversity B, Student Union President

Ejemplo 1: Lógica OR (múltiples etiquetas en un subgrupo)

Devolver segmentos de texto de archivos etiquetados con University A O Student Union President:
Múltiples etiquetas dentro de un solo subgrupo usan lógica OR. Para aplicar lógica AND, coloque cada etiqueta en un subgrupo separado (ver Ejemplo 2).
{
  "searchFilters": [
    {
      "tags": "[\"University A\",\"Student Union President\"]"
    }
  ]
}
# The sample code is for reference only. Do not use it in a production environment.
import json
import os
import sys
from typing import List

from alibabacloud_bailian20231229 import models as bailian_20231229_models
from alibabacloud_bailian20231229.client import Client as bailian20231229Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_tea_util.client import Client as UtilClient

class TagQueryExample:
    def __init__(self):
        pass

    @staticmethod
    def create_client() -> bailian20231229Client:
        """
        Initializes a client using an AccessKey pair.
        @return: Client
        @throws Exception
        """
        # Leaking code that contains an AccessKey pair threatens the security of all resources in your account. The following sample code is for reference only.
        # We recommend that you use a more secure method, such as Security Token Service (STS), to manage access credentials. For more information, see https://www.alibabacloud.com/help/en/sdk/developer-reference/v2-manage-python-access-credentials.
        config = open_api_models.Config(
            # Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is set.
            access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            # Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is set.
            access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        )
        # For more information about endpoints, see https://www.alibabacloud.com/help/model-studio/api-bailian-2023-12-29-endpoint
        config.endpoint = f'bailian.ap-southeast-1.aliyuncs.com'
        return bailian20231229Client(config)

    @staticmethod
    def main(
            args: List[str],
    ) -> None:
        client = TagQueryExample.create_client()
        # Create a retrieve_request object.
        retrieve_request = bailian_20231229_models.RetrieveRequest()
        # Required. You can enter the actual prompt.
        retrieve_request.query = 'Provide some candidates'
        # Required. Enter the actual knowledge base ID.
        retrieve_request.index_id = 'Enter the actual knowledge base ID'
        # Create a list to store tags. The logical relationship between multiple tags is OR, not AND.
        tags = ["University A", "Student Union President"]
        retrieve_request.search_filters = [
            {"tags": json.dumps(tags)}
        ]
        try:
            # Perform a retrieval. Enter the workspace ID and the retrieve_request object.
            resp = client.retrieve('Enter the actual workspace ID', retrieve_request)
            print(UtilClient.to_jsonstring(resp.body))
        except Exception as error:
            # Handle exceptions appropriately in production
            print(error.message)

if __name__ == '__main__':
    TagQueryExample.main(sys.argv[1:])
// The sample code is for reference only. Do not use it in a production environment.
import com.aliyun.bailian20231229.models.RetrieveRequest;
import com.aliyun.bailian20231229.models.RetrieveResponse;
import com.google.gson.Gson;
import com.google.gson.JsonArray;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class TagQueryExample {
    /**
     * description
Parámetros de solicitud
{
  "IndexId": "8mbtdxxxxx",
  "WorkspaceId": "llm-4u5xpd1xdjxxxxxx",
  "Query": "Provide some candidates",
  "SearchFilters": "[{\"tags\":\"[\\\"University A\\\", \\\"Student Union President\\\"]\"}]"
}
Parámetros de respuesta
{
  "Code": "Success",
  "Data": {
    "Nodes": [
      {
        "Metadata": {
          "file_path": "https://bailian-datahub-data-prod.oss-cn-beijing.aliyuncs.com/10285263/multimodal/docJson/Zhang_San_Resume_1746760910599.json?Expires=1747020348&OSSAccessKeyId=YOUR_ACCESS_KEY_ID&Signature=YOUR_SIGNATURE",
          "is_displayed_chunk_content": "true",
          "_rc_v_score": 0.1422617520249937,
          "image_url": [],
          "nid": "ba8a14099f43308734538c29271cc7cd|b99e98835c3c6d8f6496df5a43de0ba5|aa3ed8fc4aae8bbb78872994b01e0fda",
          "_q_score": 0.8935035934804278,
          "source": "0",
          "_score": 0.1736905574798584,
          "title": "",
          "doc_id": "file_e787926158704f95aad6bc967619f176_10285263",
          "content": "Name: San Zhang Sex: Male Age: 23",
          "_rc_score": 0,
          "workspace_id": "llm-4u5xpd1xdjxxxxxx",
          "hier_title": "",
          "page_number": [
            0
          ],
          "doc_name": "San Zhang's Resume",
          "pipeline_id": "8mbtdxxxxx",
          "_id": "llm-4u5xpd1xdjxxxxxx_8mbtdxxxxx_file_e787926158704f95aad6bc967619f176_10285263_0_0"
        },
        "Score": 0.1736905574798584,
        "Text": "Name: San Zhang Sex: Male Age: 23"
      },
      {
        "Metadata": {
          "file_path": "https://bailian-datahub-data-prod.oss-cn-beijing.aliyuncs.com/10285263/multimodal/docJson/Wang_Wu_Resume_1746760946844.json?Expires=1747020348&OSSAccessKeyId=YOUR_ACCESS_KEY_ID&Signature=YOUR_SIGNATURE",
          "is_displayed_chunk_content": "true",
          "_rc_v_score": 0.1592178845871759,
          "image_url": [],
          "nid": "ba8a14099f43308734538c29271cc7cd|d4a048b6799ce07e08430f018af091a0|fe90f8248ea64f70ea37c0df7afcfc12",
          "_q_score": 1,
          "source": "0",
          "_score": 0.15737050771713257,
          "title": "",
          "doc_id": "file_63563df5df66488cb8e28bfff11e40eb_10285263",
          "content": "Name: Wu Wang Sex: Male Age: 23",
          "_rc_score": 0,
          "workspace_id": "llm-4u5xpd1xdjxxxxxx",
          "hier_title": "",
          "page_number": [
            0
          ],
          "doc_name": "Wu Wang's Resume",
          "pipeline_id": "8mbtdxxxxx",
          "_id": "llm-4u5xpd1xdjxxxxxx_8mbtdxxxxx_file_63563df5df66488cb8e28bfff11e40eb_10285263_0_0"
        },
        "Score": 0.15737050771713257,
        "Text": "Name: Wu Wang Sex: Male Age: 23"
      }
    ]
  },
  "Message": "success",
  "RequestId": "12A5F9C6-xxxx-5593-8955-86D52585EE27",
  "Status": 200,
  "Success": true
}
Esto devuelve resultados tanto del currículum de San Zhang (etiquetado University A) como del currículum de Wu Wang (etiquetado Student Union President).

Ejemplo 2: Lógica AND (etiquetas en subgrupos separados)

Devolver segmentos de texto de archivos etiquetados tanto con University A COMO CON Sports Specialist Student:
{
  "searchFilters": [
    {
      "tags": "[\"University A\"]"
    },
    {
      "tags": "[\"Sports Specialist Student\"]"
    }
  ]
}
import json
import os
import sys
from typing import List

from alibabacloud_bailian20231229 import models as bailian_20231229_models
from alibabacloud_bailian20231229.client import Client as bailian20231229Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_tea_util.client import Client as UtilClient

class TagQueryExample2:
    def __init__(self):
        pass

    @staticmethod
    def create_client() -> bailian20231229Client:
        """
        Initializes a client using an AccessKey pair.
        @return: Client
        @throws Exception
        """
        # Leaking code that contains an AccessKey pair threatens the security of all resources in your account. The following sample code is for reference only.
        # We recommend that you use a more secure method, such as Security Token Service (STS), to manage access credentials. For more information, see https://www.alibabacloud.com/help/en/sdk/developer-reference/v2-manage-python-access-credentials.
        config = open_api_models.Config(
            # Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is set.
            access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            # Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is set.
            access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        )
        # For more information about endpoints, see https://www.alibabacloud.com/help/model-studio/api-bailian-2023-12-29-endpoint
        config.endpoint = f'bailian.ap-southeast-1.aliyuncs.com'
        return bailian20231229Client(config)

    @staticmethod
    def main(
            args: List[str],
    ) -> None:
        client = TagQueryExample.create_client()
        # Create a retrieve_request object.
        retrieve_request = bailian_20231229_models.RetrieveRequest()
        # Required. You can enter the actual prompt.
        retrieve_request.query = 'Provide some candidates'
        # Required. Enter the actual knowledge base ID.
        retrieve_request.index_id = 'Enter the actual knowledge base ID'
        # Create two lists to store tags.
        tag1 = ["University A"]
        tag2 = ["Sports Specialist Student"]
        retrieve_request.search_filters = [
            {"tags": json.dumps(tag1)},
            {"tags": json.dumps(tag2)}
        ]
        try:
            # Perform a retrieval. Enter the workspace ID and the retrieve_request object.
            resp = client.retrieve('Enter the actual workspace ID', retrieve_request)
            print(UtilClient.to_jsonstring(resp.body))
        except Exception as error:
            # Handle exceptions appropriately in production
            print(error.message)

if __name__ == '__main__':
    TagQueryExample2.main(sys.argv[1:])
import com.aliyun.bailian20231229.models.RetrieveRequest;
import com.aliyun.bailian20231229.models.RetrieveResponse;
import com.google.gson.Gson;
import com.google.gson.JsonArray;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class TagQueryExample2 {
    /**
     * description
Parámetros de solicitud
{
  "IndexId": "8mbtdxxxxx",
  "WorkspaceId": "llm-4u5xpd1xdjxxxxxx",
  "Query": "Provide some candidates",
  "SearchFilters": "[{\"tags\":\"[\\\"University A\\\"]\"},{\"tags\":\"[\\\"Sports Specialist Student\\\"]\"}]"
}
Parámetros de respuesta
{
  "Code": "Success",
  "Data": {
    "Nodes": [
      {
        "Metadata": {
          "file_path": "https://bailian-datahub-data-prod.oss-cn-beijing.aliyuncs.com/10285263/multimodal/docJson/Zhang_San_Resume_1746760910599.json?Expires=1747020348&OSSAccessKeyId=YOUR_ACCESS_KEY_ID&Signature=YOUR_SIGNATURE",
          "is_displayed_chunk_content": "true",
          "_rc_v_score": 0.1422617520249937,
          "image_url": [],
          "nid": "ba8a14099f43308734538c29271cc7cd|b99e98835c3c6d8f6496df5a43de0ba5|aa3ed8fc4aae8bbb78872994b01e0fda",
          "_q_score": 1,
          "source": "0",
          "_score": 0.1736905574798584,
          "title": "",
          "doc_id": "file_e787926158704f95aad6bc967619f176_10285263",
          "content": "Name: San Zhang Sex: Male Age: 23",
          "_rc_score": 0,
          "workspace_id": "llm-4u5xpd1xdjxxxxxx",
          "hier_title": "",
          "page_number": [
            0
          ],
          "doc_name": "San Zhang's Resume",
          "pipeline_id": "8mbtdxxxxx",
          "_id": "llm-4u5xpd1xdjxxxxxx_8mbtdxxxxx_file_e787926158704f95aad6bc967619f176_10285263_0_0"
        },
        "Score": 0.1736905574798584,
        "Text": "Name: San Zhang Sex: Male Age: 23"
      }
    ]
  },
  "Message": "success",
  "RequestId": "1ED6CECE-xxxx-5B21-91DB-410E0219412A",
  "Status": 200,
  "Success": true
}
Solo se devuelve el currículum de San Zhang porque es el único archivo con ambas etiquetas.

Referencias

RecursoDescripción
Crear y usar una base de conocimientosGuía de usuario de la base de conocimientos
API RetrieveRecuperar segmentos de texto de una base de conocimientos
Otorgar permisos de API a un usuario RAMConfigurar el acceso de usuario RAM para la API Retrieve
Códigos de errorSolucionar fallos en llamadas a API