0

我有一个独特的任务,我已经完成了,但这个子任务被证明是非常困难的!所以你有背景:我们运行一个 Magento 站点,并使用自定义构建的 SOLR 搜索页面。我正在使用 phpSolrClient 来解析 Solr XML 并返回可用的结果,然后我从中构建搜索结果页面。

我被赋予的任务是在 Magento 的后端有一个“属性”,我们称之为“search_tags”。目标是能够插入一个标签,它的权重由逗号分隔:

IEsight^2,hearing^1,smell^3

我想编辑 Magento 全文重新索引中的代码以分解字符串,并将该标签 X 次插入该fulltext1_en字段中。所以它会增加两次“视觉”,一次“听觉”,以及三次“嗅觉”。这将允许我们说,当有人搜索榨汁机时,在页面上放置一个搅拌机,即使“榨汁机”或“果汁”一词没有出现在 fulltext1_en 字符串中。我已经开发了用于拉取、拆分和迭代的代码......但是我处于停滞状态,因为我不知道在重新索引过程中要编辑哪些代码以将其包含在我的 fulltext1_en 中。如果有人对编辑 Magento 的全文重新索引有任何经验,我们将不胜感激!我查看了 Indexer.php,但该文件中的所有内容充其量都是模棱两可的, 所以这无济于事!一定要爱Magento!

4

1 回答 1

1

好的,对于那些希望使用 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_attributescatalog_product_entity_varchar使用 SELECT 来查找attribut_idvalueWHERE 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 应该显示您已添加“dude”、“crazyman”和“weirdsearch”所​​有 25 次!索引完成后,在您的站点搜索中搜索任何标签:您添加标签的项目应该显示在靠近顶部(如果不是顶部)的位置。享受!

于 2012-08-31T16:13:16.447 回答