According to Geoff Hutchison:
> On Fri, 18 Jan 2002, Gilles Detillieux wrote:
> > + else if (strcmp(word.get(), prefix_suffix) == 0)
> > + {
> > + tempWords.Add(new WeightWord(prefix_suffix, 1.0));
> > + }
>
> This won't work in the case where people set prefix_suffix to '' to run
> prefix matching on everything. We probably want a test something like:
>
> ((strnlen(prefix_suffix) != 0 && strcmp(word.get(), prefix_suffix) == 0) ||
> (strnlen(prefix_suffix) == 0 && strcmp(word.get(), "*") == 0))
>
> Maybe that can be simplified.
>
> > + if (strcmp(temp.get(), prefix_suffix) == 0) {
>
> Same problem here.
There was also a little wrinkle in the word separation code if you force
a new wildcard character when prefix_match_character is empty. Here's the
new patch...
--- htsearch/htsearch.cc.orig Thu Nov 1 14:45:07 2001
+++ htsearch/htsearch.cc Fri Jan 18 15:43:24 2002
@@ -444,6 +444,9 @@ setupWords(char *allWords, List &searchW
String word;
// Why use a char type if String is the new char type!!!
char *prefix_suffix = config["prefix_match_character"];
+ char *wildcard = prefix_suffix;
+ if (*wildcard == '\0')
+ wildcard = "*";
while (*pos)
{
while (1)
@@ -461,12 +464,12 @@ setupWords(char *allWords, List &searchW
tempWords.Add(new WeightWord(s, -1.0));
break;
}
- else if (HtIsWordChar(t) || t == ':' ||
+ else if (HtIsWordChar(t) || t == ':' || t == *wildcard ||
(strchr(prefix_suffix, t) != NULL) || (t >= 161 && t <= 255))
{
word = 0;
- while (t && (HtIsWordChar(t) ||
- t == ':' || (strchr(prefix_suffix, t) != NULL) || (t >=
161 && t <= 255)))
+ while (t && (HtIsWordChar(t) || t == ':' || t == *wildcard ||
+ (strchr(prefix_suffix, t) != NULL) || (t >= 161 && t <=
+255)))
{
word << (char) t;
t = *pos++;
@@ -485,6 +488,10 @@ setupWords(char *allWords, List &searchW
else if (boolean && mystrcasecmp(word.get(), boolean_keywords[2]) == 0)
{
tempWords.Add(new WeightWord("!", -1.0));
+ }
+ else if (strcmp(word.get(), wildcard) == 0)
+ {
+ tempWords.Add(new WeightWord(wildcard, 1.0));
}
else
{
--- htsearch/parser.cc.orig Thu Jul 26 15:08:52 2001
+++ htsearch/parser.cc Fri Jan 18 15:24:18 2002
@@ -240,6 +240,24 @@ Parser::perform_push()
list->isIgnore = 1;
return;
}
+ static char *wildcard = config["prefix_match_character"];
+ if (*wildcard == '\0')
+ wildcard = "*";
+ if (strcmp(temp.get(), wildcard) == 0) {
+ Database *docIndex = Database::getDatabaseInstance();
+ docIndex->OpenRead(config["doc_index"]);
+ docIndex->Start_Get();
+ while ((p = docIndex->Get_Next()))
+ {
+ dm = new DocMatch;
+ dm->score = current->weight;
+ dm->id = atoi(p);
+ dm->anchor = 0;
+ list->add(dm);
+ }
+ delete docIndex;
+ return;
+ }
temp.lowercase();
p = temp.get();
if (temp.length() > maximum_word_length)
--
Gilles R. Detillieux E-mail: <[EMAIL PROTECTED]>
Spinal Cord Research Centre WWW: http://www.scrc.umanitoba.ca/~grdetil
Dept. Physiology, U. of Manitoba Phone: (204)789-3766
Winnipeg, MB R3E 3J7 (Canada) Fax: (204)789-3930
_______________________________________________
htdig-dev mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/htdig-dev