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

Hi,

           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));
>     }

with

> 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]
https://lists.sourceforge.net/lists/listinfo/doxygen-users