У меня есть уникальная задача, которую мне дали, и я нахожусь на последнем этапе, но эта подзадача оказывается чрезвычайно сложной! Итак, у вас есть опыт: мы запускаем сайт 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 раз! Когда индекс будет завершен, выполните поиск любого из тегов в вашем поиске по сайту: этот элемент, который вы добавили, должен показывать близость, если не верх. Наслаждайтесь!