Buscador: AND obligatorio en FULLTEXT, excluir paginas-indice K2 y soportar frase exacta entre comillas
Tres bugs corregidos (issue gitea.feadulta.com#178): - OR implicito en Boolean Mode devolvia casi todo el sitio (~24.700/24.780 posts) para cualquier busqueda de varias palabras; ahora cada palabra es AND obligatorio (+). - Paginas-indice residuales K2 (categorias 37/38, listados por autor) puntuaban altisimo en relevancia por su tamano y tapaban el articulo real; excluidas de resultados de busqueda. - Palabras <3 caracteres forzadas como termino obligatorio rompian el calculo de relevancia (score 0 en filas que si coincidian); se descartan antes de construir la query. - Anadido soporte real de frase exacta: termino entre comillas dobles se envia a MySQL Boolean Mode como frase, en vez de descartarse silenciosamente.
This commit is contained in:
@@ -32,6 +32,16 @@ defined('FEA_AUTORES_EXCLUIR') or define('FEA_AUTORES_EXCLUIR', [
|
||||
*/
|
||||
defined('FEA_CATS_CARTA_EXCLUIR') or define('FEA_CATS_CARTA_EXCLUIR', [6, 21, 22]);
|
||||
|
||||
/**
|
||||
* Categorías RESIDUALES de la migración K2: páginas-índice por autor (listado de enlaces
|
||||
* a sus artículos), no son artículos. 37 = "Lista de autores habituales", 38 = "Lista
|
||||
* completa de autores por orden alfabético" (~1.169 posts). Por su gran tamaño (varios KB
|
||||
* de títulos enlazados) el ranking FULLTEXT las puntúa altísimo y tapan el resultado real
|
||||
* (bug reportado en feedback: "Tu verdadero ser" de Fray Marcos sacaba la ficha-índice del
|
||||
* autor antes que el artículo). Se excluyen de los resultados de búsqueda.
|
||||
*/
|
||||
defined('FEA_CATS_RESIDUAL_EXCLUIR') or define('FEA_CATS_RESIDUAL_EXCLUIR', [37, 38]);
|
||||
|
||||
|
||||
// ─────────────────────────────────────────────────────────────────
|
||||
// i18n mínimo (es / en / fr / it / pt)
|
||||
@@ -139,6 +149,12 @@ add_action('pre_get_posts', function (WP_Query $q): void {
|
||||
// Categoría (tema)
|
||||
if ($fea_cat > 0) $q->set('cat', $fea_cat);
|
||||
|
||||
// Excluir páginas-índice residuales K2 (ver FEA_CATS_RESIDUAL_EXCLUIR) de los
|
||||
// resultados de búsqueda. No aplica si el usuario ya filtró por una categoría concreta.
|
||||
if ($is_search && $fea_cat <= 0) {
|
||||
$q->set('category__not_in', FEA_CATS_RESIDUAL_EXCLUIR);
|
||||
}
|
||||
|
||||
// Cita bíblica: coincidencia por PREFIJO (el valor empieza por el término, ej. "Jn").
|
||||
// Usamos REGEXP '^<term>' con el término escapado para evitar metacaracteres.
|
||||
if ($fea_cita !== '') {
|
||||
|
||||
Reference in New Issue
Block a user