Pergunta

Eu fui brincar com a catalogsearch por um tempo, e eu estou quase a terminar, mas há uma coisa estranha acontecendo comigo.O único "utilizável em busca"atributos são name, child_skus e synonyme.No child_skus, Eu estou de guardar a skus de produtos associados do meu agrupados produtos, como eu estou trabalhando com agrupados produtos apenas no frontend. synonyme contém uma lista de coma palavras separadas relativas ao referido produto.

O que eu estou usando para o fulltext search é o código a seguir :

$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');  

Tudo funciona bem, por agora, exceto que, de alguma forma, ele também índices associados nome do produto na caixa de texto completo da tabela, o que acaba tocando minha pesquisa porque ela produz resultados imparciais.

Alguém tem alguma idéia sobre como mudar esse comportamento, ou controlá-lo através de admin?

Foi útil?

Solução

Dê uma olhada no método Mage_CatalogSearch_Model_Resource_Fulltext::_rebuildStoreIndex.Isso é o que realmente recria o fultext índice de pesquisa.
Em algum lugar dentro dele você vai encontrar isso:

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

e, mais tarde,

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

Isso significa que, para configurável, agrupados e pacote de produtos a criança atributos do produto são indexados também.
Você pode reescrever o modelo e remover este partes, ou deixá-lo como ele é e simplesmente reescrever o método _getProductChildIds na mesma classe e fazer ele voltar null então, será como há nenhuma criança de produtos para qualquer outro produto.
desta forma, a criança de produtos não serão indexados no pai de dados do produto.

Outras dicas

Você já pode definir o sinónimos no back-office com o "termo de pesquisa" no menu do catálogo.Para fazer que o termo de pesquisa como já foram utilizadas no front-office e, em seguida, você pode redirecionar para o produto, categoria ou cms página que você gosta.Para os produtos, você pode definir a visibilidade de acordo com o que você deseja exibir nos resultados de busca, então você realmente não precisa se preocupar com o child_skus.

Gostaria de sugerir a você para instalar o elasticsearch ou solr com um módulo apropriado para realmente melhorar os resultados de pesquisa.Além disso, você pode realmente controlar melhor com fuzzy consultas, wild cards e assim por diante.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a magento.stackexchange
scroll top