[ic] swish search - quotes
Dan Bergan
dan at berganconsulting.com
Wed Feb 7 16:06:25 EST 2007
Quoting Dan Bergan <dan at berganconsulting.com>:
> I use swish-e to search my site. I would like to allow customers to
> use all the features they are accustomed to using with search engines.
> In my testing, it looks like quotes are removed from the search spec,
> so a phrase search is impossible.
>
> Is there any way to do a phrase search with swish-e and interchange?
> I can do a phrase search from the command line -- the swish-e search
> command is:
> swish-e -w \"word1 word2\" -f /path/to/index
>
I've been wading through Swish.pm and Search.pm... It appears that if
I set either mv_exact_match or mv_coordinate, spec_check will allow my
quotes to pass through:
if ( ! $s->{mv_exact_match} and ! $s->{mv_coordinate}) {
my $string = join ' ', @specs;
eval {
@specs = Text::ParseWords::shellwords( $string );
};
if($@ or ! @specs) {
$string =~ s/['"]/./g;
$s->{mv_all_chars}[0] = 0;
@specs = Text::ParseWords::shellwords( $string );
}
}
However it looks like I will have to do some hacking in Swish.pm it
looks like quotes are always removed as "unsafe charachers":
$spec =~ s/[^-\w()"\s\*]+//g
and $CGI::values{debug}
and ::logError("Removed unsafe characters from search string");
(My regex skills may be a bit rusty, so please correct me if I'm
reading either of these wrong!)
Does this seem like a reasonable thing for me to do in Swish.pm:
#removed quote char (") from regex
$spec =~ s/[^-\w()\s\*]+//g
and $CGI::values{debug}
and ::logError("Removed unsafe characters from search string");
if ( $s->{mv_exact_match} ) {
$spec =~ s/"/\"/g;
}
else {
$spec =~ s/"//g;
}
I'm getting a bit out of my element here, I would rather not have to
change a core file, so I would appreciate any easier ways to
accomplish this!
Dan
More information about the interchange-users
mailing list