Pregunta

He estado jugando con la búsqueda de catálogos por un tiempo, y casi he terminado, pero me sucede una cosa extraña.Los únicos atributos " en busca de búsqueda " son name, child_skus y synonyme.En child_skus, estoy almacenando el SKU de los productos asociados de mis productos agrupados, ya que estoy trabajando con productos agrupados solo en la frontend.synonyme contiene una lista de palabras separadas por coma que relacionadas con dicho producto.

Lo que estoy usando para la búsqueda de texto completo es el siguiente código:

$query = Mage::getModel('catalogsearch/query')->setQueryText($searchText)->prepare();
$fulltextResource = Mage::getResourceModel('catalogsearch/fulltext')->prepareResult(
            Mage::getModel('catalogsearch/fulltext'), 
            $searchText, 
            $query
        );
$products->getSelect()->joinInner(
            array('search_result' => $products->getTable('catalogsearch/result')),
            $products->getConnection()->quoteInto(
                'search_result.product_id=e.entity_id AND search_result.query_id=?',
                $query->getId()
            ),
            array('relevance' => 'relevance')
        );
$products->getSelect()->order('relevance DESC');  

Todos funciona bien por ahora, excepto que de alguna manera, también indexa el nombre del producto asociado en la tabla de texto completo, que termina atascando mi búsqueda porque produce resultados sesgados.

¿Alguien tiene alguna idea de cómo cambiar ese comportamiento, o controlarlo a través de Admin?

¿Fue útil?

Solución

Eche un vistazo al método Mage_CatalogSearch_Model_Resource_Fulltext::_rebuildStoreIndex.Ese es el que realmente reconstruye el índice de búsqueda Fultext.
En algún lugar dentro de él encontrarás esto:

$productChildren = $this->_getProductChildIds($productData['entity_id'], $productData['type_id']);
$productRelations[$productData['entity_id']] = $productChildren;

y luego

if ($productChildren = $productRelations[$productData['entity_id']]) {
   foreach ($productChildren as $productChildId) {
       if (isset($productAttributes[$productChildId])) {
           $productIndex[$productChildId] = $productAttributes[$productChildId];
       }
   }
}

Esto significa que para productos configurables, agrupados y de paquete, también se indexan los atributos del producto secundario.

Puede reescribir el modelo y eliminar estas partes, o dejarlo como es y simplemente volver a escribir el método _getProductChildIds en la misma clase y hacer que devuelva null para que sea como si no hay productos infantiles para ningún otro producto.
De esta manera, los productos infantiles no se indexarán en los datos del producto principal.

Otros consejos

Ya puede configurar los sinónimos en la back-office con "término de búsqueda" en el menú del catálogo.Para hacer que el término de búsqueda ya se haya utilizado en la oficina frontal y luego puede redirigir al producto, categoría o página de CMS que desee. Para los productos, puede configurar la visibilidad en consecuencia a lo que desea mostrar en los resultados de búsqueda, por lo que realmente no necesita molestarse en el niño_skus.

Le sugeriría que instale elasticsearch o SOLR con un módulo apropiado para mejorar realmente los resultados de búsqueda.Además, realmente puede manejar mejor con las consultas difusas, las tarjetas salvajes, etc.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top