Una consulta de coincidencia con el Tablestore SDK for Java busca en campos Text o Keyword y devuelve las filas que cumplen las condiciones de coincidencia junto con sus puntuaciones de relevancia.
Requisitos previos
Instale Tablestore SDK for Java e inicialice el cliente.
Descripción de la función
Una consulta de coincidencia busca en campos Text o Keyword. Para obtener información sobre los tipos de campo, consulte String types. Estos dos tipos de campo utilizan comportamientos de coincidencia diferentes:
Text: El valor del campo y el texto de la consulta se analizan mediante el analizador configurado al crear el índice de búsqueda. Si no se configura ningún analizador, se utiliza la tokenización de palabra única de forma predeterminada. El operadorORpredeterminado coincide con un valor de campo que contiene cualquier token de la consulta. Puede usar el operadorANDpara exigir que coincidan todos los tokens de la consulta o especificar el número mínimo de tokens que deben coincidir.Keyword: No se analiza ni el valor del campo ni el texto de la consulta. Una fila solo coincide si el valor completo del campo es igual al texto de la consulta.
Una consulta de coincidencia no requiere que los tokens coincidentes sean adyacentes o que estén en el mismo orden que el texto de la consulta. Para hacer coincidir tokens en orden, utilice una match phrase query. Si un campo Text usa el analizador difuso y necesita una búsqueda difusa de alto rendimiento, también se recomienda una consulta de frase coincidente.
El siguiente ejemplo consulta filas cuyo campo description contiene el token tablestore o durable y devuelve hasta 10 filas, el número total de filas coincidentes y las puntuaciones de relevancia.
String tableName = "example_table";
String indexName = "example_index";
MatchQuery matchQuery = new MatchQuery();
matchQuery.setFieldName("description");
matchQuery.setText("tablestore durable");
SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(matchQuery);
searchQuery.setSort(new Sort(Collections.singletonList(new ScoreSort())));
searchQuery.setLimit(10);
searchQuery.setTrackTotalCount(SearchQuery.TRACK_TOTAL_COUNT);
SearchRequest request = new SearchRequest(tableName, indexName, searchQuery);
SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
columnsToGet.setReturnAll(true);
request.setColumnsToGet(columnsToGet);
SearchResponse response = client.search(request);
for (SearchHit hit : response.getSearchHits()) {
System.out.println(hit.getRow());
System.out.println(hit.getScore());
}
Parámetros
Solicitud de búsqueda
request es un objeto SearchRequest que contiene los siguientes parámetros.
|
Nombre |
Tipo |
Descripción |
|
tableName (obligatorio) |
String |
El nombre de la tabla. |
|
indexName (obligatorio) |
String |
El nombre del índice de búsqueda. |
|
searchQuery (obligatorio) |
SearchQuery |
La condición de consulta y la configuración común de la consulta. |
|
columnsToGet (opcional) |
SearchRequest.ColumnsToGet |
La configuración de columnas devueltas. Si omite este parámetro, solo se devuelven las columnas de clave principal. |
|
timeoutInMillisecond (opcional) |
int |
El tiempo de espera de la consulta a nivel de solicitud en milisegundos. El valor predeterminado es |
|
routingValues (opcional) |
|
Los valores de clave principal para los campos de enrutamiento personalizados. Omita este parámetro si el índice no utiliza enrutamiento personalizado. |
Configuración de la consulta
request.searchQuery es un objeto SearchQuery que contiene los siguientes parámetros.
|
Nombre |
Tipo |
Descripción |
|
query (obligatorio) |
Query |
La condición de consulta. Establezca este parámetro en |
|
offset (opcional) |
Integer |
La posición inicial de la consulta. |
|
limit (opcional) |
Integer |
El número máximo de filas a devolver. Establezca este parámetro en |
|
highlight (opcional) |
Highlight |
La configuración de resumen y resaltado para campos |
|
collapse (opcional) |
Collapse |
La configuración de colapso de campos, que deduplica los resultados según un campo especificado. Para obtener detalles de configuración, consulte Collapse query results. |
|
sort (opcional) |
Sort |
El orden de clasificación de los resultados. Para obtener detalles de configuración, consulte Sort and paginate results. |
|
trackTotalCount (opcional) |
int |
El número máximo esperado de filas coincidentes a contar. El valor predeterminado es |
|
filter (opcional) |
SearchFilter |
Un filtro que se aplica a los resultados de |
|
aggregationList (opcional) |
|
La configuración de agregación. Para obtener detalles de configuración, consulte Aggregation. |
|
groupByList (opcional) |
|
La configuración de agrupación. Para obtener detalles de configuración, consulte Aggregation. |
|
token (opcional) |
byte[] |
El token de paginación. Establezca este parámetro en el valor |
Condición de coincidencia
request.searchQuery.query es un objeto MatchQuery que contiene los siguientes parámetros.
|
Nombre |
Tipo |
Descripción |
|
fieldName (obligatorio) |
String |
El nombre del campo de índice |
|
text (obligatorio) |
String |
El texto de la consulta. Para un campo |
|
operator (opcional) |
QueryOperator |
El operador utilizado para combinar los tokens de la consulta. |
|
minShouldMatch (opcional) |
String o int |
El número mínimo de tokens de consulta que deben coincidir cuando |
|
weight (opcional) |
float |
El peso de la consulta. El valor predeterminado es |
setMinimumShouldMatch(Integer) está obsoleto. Utilice setMinShouldMatch(int) o setMinShouldMatch(String).
Columnas devueltas
request.columnsToGet es un objeto SearchRequest.ColumnsToGet que contiene los siguientes parámetros.
|
Nombre |
Tipo |
Descripción |
|
columns (opcional) |
|
Las columnas de atributos a devolver. Establezca este parámetro solo si tanto |
|
returnAll (opcional) |
boolean |
Especifica si se deben devolver todas las columnas de atributos de la tabla. El valor predeterminado es |
|
returnAllFromIndex (opcional) |
boolean |
Especifica si se deben devolver todas las columnas de atributos indexadas. El valor predeterminado es |
Valores devueltos
Respuesta de la consulta
El método search devuelve un objeto SearchResponse. La siguiente tabla describe los campos principales.
|
Nombre |
Tipo |
Descripción |
|
totalCount |
long |
El número de filas coincidentes. Llame a |
|
rows |
|
Las filas devueltas en la respuesta actual. Llame a |
|
searchHits |
|
Las coincidencias de la consulta. Llame a |
|
nextToken |
byte[] |
El token de la página siguiente. Llame a |
|
isAllSuccess |
boolean |
Indica si todas las particiones del índice se consultaron correctamente. Llame a |
Coincidencia de consulta
response.searchHits[] es un objeto SearchHit que contiene los siguientes campos principales.
|
Nombre |
Tipo |
Descripción |
|
row |
Row |
La fila coincidente. Llame a |
|
score |
Double |
La puntuación de relevancia. Llame a |
|
highlightResultItem |
HighlightResultItem |
El resultado de resumen y resaltado. Llame a |
Ejemplos
Coincidir con todos los tokens de la consulta
Establezca operator en AND para coincidir con una fila solo si el valor del campo contiene todos los tokens de la consulta.
MatchQuery matchQuery = new MatchQuery();
matchQuery.setFieldName("description");
matchQuery.setText("tablestore durable");
matchQuery.setOperator(QueryOperator.AND);
SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(matchQuery);
Establecer el número mínimo de tokens coincidentes
Cuando se utiliza el operador OR, establezca minShouldMatch para especificar el número mínimo de tokens de consulta que deben coincidir. El siguiente ejemplo requiere como mínimo dos tokens coincidentes.
MatchQuery matchQuery = new MatchQuery();
matchQuery.setFieldName("description");
matchQuery.setText("tablestore durable cloud");
matchQuery.setOperator(QueryOperator.OR);
matchQuery.setMinShouldMatch(2);
SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(matchQuery);