我有我已经赋予一个唯一的任务,我在它的最后一站,但这个子任务已经被证明是非常困难的! 所以,你有背景的:我们经营的Magento站点,并使用定制SOLR搜索页面。 我使用phpSolrClient解析XML的Solr并返回可用的结果,我再建从搜索结果页面。
我一直在考虑的任务是必须在Magento的后端的“属性”,可以称之为“search_tags”。 我们的目标是能够插入一个标签,它的重量由逗号delimitered:
即sight^2,hearing^1,smell^3
我想编辑Magento的全文重新索引掰开串代码,并插入的次数,标记X到fulltext1_en
领域。 因此,这将增加“视线”两次,“听”一次,“闻”三次。 这将允许我们说,把搅拌机在页面上,当有人搜索榨汁机,即使术语“榨汁机”或“果汁”并没有出现在fulltext1_en字符串。 我已开发的代码来拉,分割和重复......不过我是在停转,因为我不知道该怎样修改代码,包括在此期间重新索引过程中我fulltext1_en。 如果任何人有编辑Magento的全文重新编制的经验,你的投入将不胜感激! 我看着Indexer.php,但一切都在该文件中是模糊的最好,所以这是没有帮助! 爱是爱Magento的!
OK对于那些希望改变,并给予“加权标签”使用SOLR在Magento定制搜索到,我一整晚都没睡得到这个权利,但它的工作原理...
首先,在Magento的一个过滤器,它适用于所有产品。 我将其命名“search_tags”。
接下来,使用下面的公式在该过滤器的检查项目:
dude^25,crazyman^25,wierdsearch^25
其次是一克拉的每个单词,然后你想给它的重量。 (这是多少次的话会被重复,然后添加到fulltext1_en。)
做到这一点后,打开以下文件:
/app/code/core/Mage/CatalogSearch/Model/Mysql4/Fulltext.php
我知道它说MySQL4,不注意,SOLR使用这个指数。
关于500线,你会看到下面的块:
if ($selects) {
$select = '('.join(')UNION(', $selects).')';
$query = $this->_getWriteAdapter()->query($select);
while ($row = $query->fetch()) {
略低于此块插入如下:注:请不要使用我在这里列出的属性ID,这是唯一我的设置。 你将不得不寻找你的数据库找到这个ID。 我使用JOIN加盟eav_attributes
与catalog_product_entity_varchar
和使用SELECT找到attribut_id
和value
WHERE ENTITY_ID =(此处插入你的产品ID)。 这是一个痛苦,但它是唯一的方法。 这将返回该产品的所有属性。 查找具有我们先前输入的标签之一,并获得它的ID。 插入到下面的代码。
$attr_val = $row['value']; // Set attr_val so that it can be manipulated in following IF
if ($row['attribute_id'] == 457) { // 457 is the ID of MY search_tags filter, yours WILL be different! It can be found by joining eav_attributes table and catalog_product_entity_varchar and searching for the attribute value and ID where entity_id is X
$input = $row['value']; // Set $input to value of filter
$attr_val = ""; // Create Emtpy string
$pieces = explode( ',', $input ); // Explode filter by comma
foreach ($pieces as $val){
$i=1;
$val = explode( '^', $val); // Explode each "tag" by carat
while ($i <= $val[1]) { // Loop while $i is less than or equal to the number on the right side of the carat
$i++;
$attr_val = $attr_val . " " . $val[0]; // Append $attr_val with the word to the right side of the carat
}
}
}
$result[$row['entity_id']][$row['attribute_id']] = $attr_val; // Modified from Original
当您插入......然后注释掉以下块。
$result[$row['entity_id']][$row['attribute_id']] = $row['value']; // ORIGINAL BLOCK -- UNCOMMENT -- DO NOT DELETE
现在运行一个全文重新索引,和你的fulltext1_en应该表明您已经添加了“花花公子”,“crazyman”和“weirdsearch”所有的25倍! 当完成索引,搜索任何标签在网站搜索:您加入该项目的标签应密切展现出来,如果不是顶部。 请享用!