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

Reply via email to