Benny Chan
2007-Jul-27 23:38 UTC
[Xapian-discuss] Making Spelling Suggestion/Correction Work!
Hello All, I have found solutions to my previous issues and have stumbled upon a new one. Spelling suggestion. I can't get it to work. I index my documents as usual, then I run this code in PHP: //create a query parser $query_parser = new XapianQueryParser(); $query_parser->set_default_op(XapianQuery::OP_AND); $rp = new XapianDateValueRangeProcessor(0, true); $query_parser->add_valuerangeprocessor($rp); //set the stemmer and turn on the stemming strategy $stemmer = new XapianStem("english"); $query_parser->set_stemmer($stemmer); $query_parser->set_stemming_strategy(XapianQueryParser::STEM_SOME); //set the database $query_parser->set_database($db); //set prefix $query_parser->add_boolean_prefix("category", "XC"); //add prefix so you can search within titles $query_parser->add_prefix("title", "S"); //create enquire object $enq = new XapianEnquire($db); //parse and create the query $query = $query_parser->parse_query($_REQUEST["search"], XapianQueryParser::FLAG_SPELLING_CORRECTION); if (strlen(trim($_REQUEST["broad_category_id"])) > 0) { $query = new XapianQuery(XapianQuery::OP_FILTER, $query, new XapianQuery("XC" . $_REQUEST["broad_category_id"])); } $var = $query_parser->get_corrected_query_string(); echo $var . "\n"; I type in mispelled words like "edcation" and "scool" but get nothing. The words "education" and "school" return results so I'm assuming those words are in the spelling database. However, I don't know. I just index documents as usual without manually creating a separate spelling database. Should I? This seems like such a cool feature, I'm dying to get it to work. If anyone can shed some light on this, I'd really appreciate it. Thanks for reading. Benny
Richard Boulton
2007-Jul-28 00:34 UTC
[Xapian-discuss] Making Spelling Suggestion/Correction Work!
Benny Chan wrote:> Hello All, > > I have found solutions to my previous issues and have stumbled upon a new > one. Spelling suggestion. I can't get it to work. I index my documents as > usual, then I run this code in PHP: >...> > I type in mispelled words like "edcation" and "scool" but get nothing. The > words "education" and "school" return results so I'm assuming those words > are in the spelling database. However, I don't know. I just index documents > as usual without manually creating a separate spelling database.Yes, you need to add words to the spelling database explicitly. You can use the WritableDatabase::add_spelling() method to do this, or the FLAG_SPELLING option of the termgenerator to do so. I don't think scriptindex has support for adding spellings to the spelling correction database yet, though. -- Richard