CatalogSearch - FullTextから子製品名を除外します
-
12-12-2019 - |
質問
カタログ検索でしばらく遊んでいます、そしてほとんど完了しましたが、私には奇妙なことがあることがあります。唯一の ""属性 "属性"属性はname
、child_skus
、およびsynonyme
です。child_skus
では、グループ化されている製品をフロントエンドでのみグループ化しているため、グループ化された製品の関連製品のSKUを保存しています。synonyme
は、上記製品に関連するコマ区切りの単語のリストを含みます。
フルテキスト検索に使用しているものは、次のコードです。
$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');
.
すべての機能今のところ大丈夫、を除くそれは、それが完全な結果を妨げるので私の検索を妨げるので、それは私の検索を妨げることを終えた。
誰もがその行動を変更する方法、または管理者を通してそれを制御する方法について何か考えを持っていますか?
解決
メソッドMage_CatalogSearch_Model_Resource_Fulltext::_rebuildStoreIndex
を見てください。これが、実際にFultext検索インデックスを再構築するものです。
その中のどこかであなたはこれを見つけるでしょう:
$productChildren = $this->_getProductChildIds($productData['entity_id'], $productData['type_id']);
$productRelations[$productData['entity_id']] = $productChildren;
.
以降
if ($productChildren = $productRelations[$productData['entity_id']]) {
foreach ($productChildren as $productChildId) {
if (isset($productAttributes[$productChildId])) {
$productIndex[$productChildId] = $productAttributes[$productChildId];
}
}
}
.
これは、設定可能でグループ化され、バンドル製品の場合、子製品属性も索引付けされていることを意味します。
モデルを書き換えてこの部分を取り除くことも、それが同じクラスにメソッド_getProductChildIds
を書き換えて、それが他の製品のための子製品がないようにするようにするためにそれが単にそれを書き直すことができます。
このようにして、子製品は親製品データで索引付けされません。
他のヒント
カタログメニューの「検索用語」にバックオフィスに同義語をすでに設定できます。それを行うために、検索語はすでにフロントオフィスで使用されていてから、好きな製品、カテゴリ、またはCMSページにリダイレクトできます。 製品の場合は、検索結果に表示したいものにそれに応じて可視性を設定できます。
私はあなたが本当に検索結果を改善するために適切なモジュールでElasticsearchまたはSolrをインストールすることをお勧めします。さらに、あなたは本当にファジークエリ、ワイルドカードなどで良く管理することができます。