[ic] Prevent search from matching on html

Josh Lavin josh at myprivacy.ca
Fri Oct 27 13:17:39 EDT 2006

On Oct 26, 2006, at 5:29 PM, Kevin Walsh wrote:

> Josh Lavin <josh at myprivacy.ca> wrote:
>> I am finding that when we use HTML in our product descriptions, the
>> search results will include products where an HTML tag matched the
>> search query.
>> Simple example: if my description contains "<h2>Features</h2>" and
>> someone searches for 'h2', then that product will be returned in the
>> results.
>> I would like to avoid this, and figured I needed a custom SearchOp,
>> but I'm having no luck with this one:
>> CodeDef not_tags SearchOp
>> CodeDef not_tags Routine <<EOR
>> sub {
>>          my ($self, $i, $pat) = @_;
>>          return sub {
>>              my $string = shift;
>>              $string =~ s:<[/\w].*?\s?/?>::gi;
>>              return $string;
>>          };
>> }
>> EOR
>> The idea is to remove any HTML tags before searching. Any ideas?
> You are always returning a true value.  A SearchOp's coderef needs
> to return true if a match is found or false if no match is found.
> Try something like this instead:
>     CodeDef not_tags SearchOp
>     CodeDef not_tags Routine <<EOR
>     sub {
>         my ($self, $i, $pat) = @_;
>         $pat = qr/$pat/i;
>         return sub {
>             my $string = shift;
>             $string =~ s:<[/\w].+?>::gi;
>             return $string =~ $pat;
>         };
>     }
>     EOR

Thanks, Kevin. That did the trick, but only after I made a change to  
Search.pm, which you mentioned here:

I was getting the same "Can't use an undefined value as an ARRAY  
reference" error.

After making the change, I then started getting random bareword  
errors. When searching for 'berkey' (a real product), sometimes it  
would get the result, and other times this:

Limit subroutine creation: Bad code: Bareword found where operator  
expected at (eval 1224) line 8, near "] aqberkey" syntax error at  
(eval 1224) line 8, near "] aqberkey "

This is mentioned here:

Another thing, perhaps unrelated, is how to search multiple fields  
with a custom SearchOp and get it to work on all? E.g.:

Thanks much,
Josh Lavin
Kingdom Design   http://www.kingdomdesign.com/

More information about the interchange-users mailing list