Extending syntax of external searches.

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view

Extending syntax of external searches.

Alex Finch


           I thought I would share this with other doxygen users. I recently moved my site to using "external searching" ( see
http://www.stack.nl/~dimitri/doxygen/manual/extsearch.html ) . I noticed that the xapian library used by doxygen can provide more
advance searching than is enabled by default in doxygen, so I modified addon/doxysearch/doxysearch.cpp to take advantage of it. In
the main routine, I replaced the lines :

>  Xapian::Query query;
>     std::vector<std::string> words = split(searchFor,' ');
>     for (std::vector<std::string>::const_iterator it=words.begin();it!=words.end();++it)
>     {
>           query = Xapian::Query(Xapian::Query::OP_OR,query,Xapian::Query(*it));
>     }


> std::vector<std::string> words = split(searchFor,' ');
>     Xapian::QueryParser parser;
>     parser.set_database(db);
>     parser.set_default_op(Xapian::Query::OP_AND);
>     parser.set_stemming_strategy(Xapian::QueryParser::STEM_ALL);
>     Xapian::termcount max_expansion=100;
> //parser.set_max_wildcard_expansion(max_expansion,Xapian::Query::WILDCARD_LIMIT_MOST_FREQUENT);
>     parser.set_max_wildcard_expansion(max_expansion);
>     Xapian::Query query=parser.parse_query(searchFor,Xapian::QueryParser::FLAG_DEFAULT|Xapian::QueryParser::FLAG_WILDCARD);

which gives me "stemmed" searches,  wildcarding, and all terms are ANDed by default . The maximum wildcard expansion doesn't appear
to work however, but this does not appear to be a problem for me. I have xapian 1.2.22 on my system which is about 18 months old.

Then, to help my users, I modified  src/translator_en.h so that search results include a link to a document describing the available
search syntax.

> virtual QCString trSearchResults(int numDocuments)
>     {
>         QCString Prompt("<BR> <A HREF=http://mywebserver/QueryParserSyntax.html> See here for details of available search syntax.
> </A>");
>       if (numDocuments==0)
>       {
>         return "Sorry, no documents matching your query."+Prompt;  }
>       else if (numDocuments==1)
>       {
>         return "Found <b>1</b> document matching your query."+Prompt;
>       }
>       else
>       {
>         return "Found <b>$num</b> documents matching your query. Showing best matches first."+Prompt ;
>       }
>     }

I didn't attempt to translate this into all the other 43 available languages however!

The document QueryParserSyntax.html is a modified version of https://xapian.org/docs/queryparser.html with just the parts relevant
to my setup included.

Hope this helps someone else.

Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
Doxygen-users mailing list
[hidden email]