CatalogSearch - excluir da criança nomes de produto fulltext
-
12-12-2019 - |
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?
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.