Alter Magento Index Полный текст поиска?

У меня есть уникальная задача, которую мне дали, и я нахожусь на последнем этапе, но эта подзадача оказывается чрезвычайно сложной! Итак, у вас есть опыт: мы запускаем сайт Magento и используем пользовательскую страницу поиска SOLR. Я использую phpSolrClient для анализа XML-файла Solr и возвращения возвращаемого результата, который затем создавал страницу результатов поиска.

Задача, которую я дал, – иметь «атрибут» в конце Magento, позволяет называть это «search_tags». Цель состоит в том, чтобы иметь возможность вставлять тег, а его вес делится запятыми:

т.е. sight^2,hearing^1,smell^3

Я хотел бы отредактировать код в полнотекстовом reindex Magento, чтобы разбить эту строку и вставить этот тег X раз в поле fulltext1_en . Поэтому он дважды добавлял «зрение», «слыша» один раз и «пахнет» три раза. Это позволит нам сказать, поставьте блендер на страницу, когда кто-то ищет соковыжималки, хотя термин «соковыжималка» или «сок» не отображается в строке fulltext1_en. Я разработал код для вытягивания, разделения и повторения … Однако я нахожусь в состоянии ожидания, так как не знаю, какой код изменить, чтобы включить это в свой fulltext1_en во время процесса reindex. Если у кого-нибудь есть опыт редактирования полнотекстового Reindex Magento, ваш вход будет очень благодарен! Я смотрел в Indexer.php, но все в этом файле в лучшем случае неоднозначно, так что это не помогло! Должен любить Мадженто!

ОК для тех, кто хочет изменить и дать «взвешенные теги» для пользовательского поиска в Magento, используя SOLR, я всю ночь все правильно понял, но он работает …

Сначала создайте фильтр в 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()) { 

JUST BELOW Этот блок вставляет следующее: ПРИМЕЧАНИЕ. Не используйте идентификатор атрибута, который я привел здесь, который уникален для моей настройки. Вам нужно будет найти свою базу данных, чтобы найти этот идентификатор. Я использовал JOIN для присоединения eav_attributes к catalog_product_entity_varchar и использовал SELECT, чтобы найти атрибут_ид и value WHERE entity_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 

Теперь запустите полнотекстовый reindex, и ваш fulltext1_en должен показать, что вы добавили «чувак», «crazyman» и «weirdsearch» все 25 раз! Когда индекс будет завершен, выполните поиск любого из тегов в вашем поиске по сайту: этот элемент, который вы добавили, должен показывать близость, если не верх. Наслаждайтесь!