UPDATE
Mage_CatalogSearch_Model_Query中とMage_CatalogSearch_Model_Mysql4_Search_CollectionクラスのCataloSearchフォルダ下の答えは、nを行います彼らは検索コードのいくつかを変更しているので、Magento 1.7+ではうまくいかないようです。私はそれを解決するために取り組んでおり、後で更新する予定です。
私は自分の質問に答えるつもりです。ありがとうございました、Anton Sに手がかりがありましたが、私は自分でいくつかの鍵ファイルを見つけ、私が望む変更を実装することができました。ここで
キーファイルです: アプリ/コード/コア/メイジ/ CatalogSearch /モデル/ Mysql4/Fulltext.php
あなたはcore
local
構造にそのファイルにつながる構造、およびコピーをコピーしますそこにもコアファイルは、そのよう: アプリ/コード/ローカル/メイジ/ CatalogSearch /モデル/ Mysql4/Fulltext.php
はその後一人でcore
ファイルを残して、local
ファイルに対するすべての変更を行います。この関数prepareResult内側の線315の周りのコードのビット、($オブジェクト、$ QUERYTEXT、$クエリ)のための
ルック:
foreach($words as $word) {
$like[ ] = '`s`.`data_index` LIKE :likew' . $likeI;
$bind[':likew' . $likeI] = '%' . $word . '%';
$likeI ++;
}
if ($like) {
$likeCond = '(' . join(' OR ', $like). ')';
}
そうだOR '私に役に立たない結果の数千を与えていたものがあります。例えば、 "緑と赤のチェックシャツ"の検索は、緑、赤、および/またはチェック柄(シャツ、スカート、ブリム、ウサギを含む)、店内のすべてのシャツを私に見せてしまうでしょう。ユーザーが実際に探したいのは、すべての検索語を含む製品です。上記のように、「赤い」が含まれているため「退屈」や「保存済み」などの検索結果も表示されます。
問題のほとんどを解決するには、単に「OR」を「AND」に変更するだけです。また、変更は「FULLTEXT」タイプではなく、「LIKE」タイプの検索にのみ適用されます。あまりにも多くの結果を排除するため、FULLTEXTはMagentoではうまく機能しません。以下に概説されている方法がはるかに優れています。
変更するには:
- は、上記の変更でファイルを保存します。
- システム - >カタログ - >カタログ検索に移動し、検索タイプが「好き」であることを確認します。
管理者で、システム - >インデックス管理に移動し、カタログ検索インデックスの隣にあるチェックボックスをオンにしてインデックスを再作成するか、またはすべてインデックスを再作成します。 (OR Magentoのルート型で、コマンドラインから:
PHPシェル/ indexer.php --reindex catalogsearch_fulltext
)
あなたはときにも "退屈" などの単語を除外したい場合"red"を検索すると、同じファイルに2回目の変更を実装することができます。その読み取り内部コードの別のセクションがあり
:
$bind[':likew' . $likeI] = '%' . $word . '%';
%前面には「退屈」%赤%のようなものであることを意味します。しかし、インデックスが構築される方法のために適切な効果を得るためには、最初の%を削除するだけではありません。
変化に上記のコード行:
$バインド[ ':likew' だからではなく、あなたは、これら2つの変更を行います。 $ likeI] = '%'。 $ word。 '%';
閉じる引用符の前の最初の%の後のSPACEに注意してください。これで、$ wordで始まる単語だけが検索されます(例:red、redding、reddy、rediculousはすべて '%red%'と一致します)。ただし、すべての単語の前にスペースがあるようにする必要があります。ファイルの先頭付近
- 、クラスMage_CatalogSearch_Model_Mysql4_Fulltextの下で、ライン48の周りに、あなたはこれを見つける必要があります。
保護の$ _separator = '|';
私はちょうどこれにそれを変更:
protected $_separator = ' | ';
は、パイプの両側にスペースを置きます。インデックスを再作成すると、すべての単語の前後に空白が表示されます。 "kit"を検索すると "kitchen"の検索結果が得られますが、少なくとも "skit"の検索結果は表示されません。
最後に、私が行った最後の変更の1つは、少なくとも複数の「s」で終わる複数の検索が単一の検索と同じ結果を返すようにすることでした。今、「赤と緑の格子縞のシャツ」は赤の論理積の緑のチェック模様「と同じ結果を返し、
foreach($words as $word) {
$word = rtrim($word, 's'); //this line added
$like[ ] = '`s`.`data_index` LIKE :likew' . $likeI;
$bind[':likew' . $likeI] = '%' . $word . '%';
$likeI ++;
}
単にすべての単語の終わりオフ「s」をチョップ: Iは示されたコードの行を追加しましたシャツ"。
私の次のプロジェクトでは、複数単語の検索でより良い結果を得るために、文字列の解析にいくつかの変更を加えることがあります。私はFYI、このファイルを探しています:文字列解析のためのFulltext.phpファイルで使用されているアプリ/コード/コア/メイジ/コア/ヘルパー/ String.php
function splitWords
を、。
注:この変更がアップグレードセーフにするには、あなたがapp/code/local
内app/code/core
過ぎてフォルダ構造を複製するだろう、このような: アプリ/コード/ローカル/メイジ/ CatalogSearch /モデル/ Mysql4/Fulltext.php
そこにコアファイルをコピーしてそこに変更を加えてください。
"mother lode"を正しく使用するための+1インターネット。 – clockworkgeek
@clockworkgeek fanks。 P.P.私はそれを見つけたと思う! –