<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Search Adapters — Sphinx 1.1.3 documentation</title> <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../', VERSION: '1.1.3', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true }; </script> <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> <link rel="search" type="application/opensearchdescription+xml" title="Search within Sphinx 1.1.3 documentation" href="../_static/opensearch.xml"/> <link rel="top" title="Sphinx 1.1.3 documentation" href="../index.html" /> <link rel="up" title="Sphinx Web Support" href="../websupport.html" /> <link rel="next" title="Storage Backends" href="storagebackends.html" /> <link rel="prev" title="The WebSupport Class" href="api.html" /> <style type="text/css"> table.right { float: right; margin-left: 20px; } table.right td { border: 1px solid #ccc; } </style> </head> <body> <div style="background-color: white; text-align: left; padding: 10px 10px 15px 15px"> <img src="../_static/sphinx.png" alt="Sphinx logo" /> </div> <div class="related"> <h3>Navigation</h3> <ul> <li class="right" style="margin-right: 10px"> <a href="../genindex.html" title="General Index" accesskey="I">index</a></li> <li class="right" > <a href="../py-modindex.html" title="Python Module Index" >modules</a> |</li> <li class="right" > <a href="storagebackends.html" title="Storage Backends" accesskey="N">next</a> |</li> <li class="right" > <a href="api.html" title="The WebSupport Class" accesskey="P">previous</a> |</li> <li><a href="../index.html">Sphinx home</a> | </li> <li><a href="../contents.html">Documentation</a> »</li> <li><a href="../websupport.html" accesskey="U">Sphinx Web Support</a> »</li> </ul> </div> <div class="sphinxsidebar"> <div class="sphinxsidebarwrapper"> <h3><a href="../contents.html">Table Of Contents</a></h3> <ul> <li><a class="reference internal" href="#">Search Adapters</a><ul> <li><a class="reference internal" href="#basesearch-methods">BaseSearch Methods</a></li> </ul> </li> </ul> <h4>Previous topic</h4> <p class="topless"><a href="api.html" title="previous chapter">The WebSupport Class</a></p> <h4>Next topic</h4> <p class="topless"><a href="storagebackends.html" title="next chapter">Storage Backends</a></p> <h3>This Page</h3> <ul class="this-page-menu"> <li><a href="../_sources/web/searchadapters.txt" rel="nofollow">Show Source</a></li> </ul> <div id="searchbox" style="display: none"> <h3>Quick search</h3> <form class="search" action="../search.html" method="get"> <input type="text" name="q" /> <input type="submit" value="Go" /> <input type="hidden" name="check_keywords" value="yes" /> <input type="hidden" name="area" value="default" /> </form> <p class="searchtip" style="font-size: 90%"> Enter search terms or a module, class or function name. </p> </div> <script type="text/javascript">$('#searchbox').show(0);</script> </div> </div> <div class="document"> <div class="documentwrapper"> <div class="bodywrapper"> <div class="body"> <div class="section" id="search-adapters"> <span id="searchadapters"></span><h1>Search Adapters<a class="headerlink" href="#search-adapters" title="Permalink to this headline">¶</a></h1> <p>To create a custom search adapter you will need to subclass the <a class="reference internal" href="#sphinx.websupport.search.BaseSearch" title="sphinx.websupport.search.BaseSearch"><tt class="xref py py-class docutils literal"><span class="pre">BaseSearch</span></tt></a> class. Then create an instance of the new class and pass that as the <cite>search</cite> keyword argument when you create the <a class="reference internal" href="api.html#sphinx.websupport.WebSupport" title="sphinx.websupport.WebSupport"><tt class="xref py py-class docutils literal"><span class="pre">WebSupport</span></tt></a> object:</p> <div class="highlight-python"><pre>support = WebSupport(srcdir=srcdir, builddir=builddir, search=MySearch())</pre> </div> <p>For more information about creating a custom search adapter, please see the documentation of the <a class="reference internal" href="#sphinx.websupport.search.BaseSearch" title="sphinx.websupport.search.BaseSearch"><tt class="xref py py-class docutils literal"><span class="pre">BaseSearch</span></tt></a> class below.</p> <dl class="class"> <dt id="sphinx.websupport.search.BaseSearch"> <em class="property">class </em><tt class="descclassname">sphinx.websupport.search.</tt><tt class="descname">BaseSearch</tt><a class="headerlink" href="#sphinx.websupport.search.BaseSearch" title="Permalink to this definition">¶</a></dt> <dd><p>Defines an interface for search adapters.</p> </dd></dl> <div class="section" id="basesearch-methods"> <h2>BaseSearch Methods<a class="headerlink" href="#basesearch-methods" title="Permalink to this headline">¶</a></h2> <blockquote> <div>The following methods are defined in the BaseSearch class. Some methods do not need to be overridden, but some (<a class="reference internal" href="#sphinx.websupport.search.BaseSearch.add_document" title="sphinx.websupport.search.BaseSearch.add_document"><tt class="xref py py-meth docutils literal"><span class="pre">add_document()</span></tt></a> and <a class="reference internal" href="#sphinx.websupport.search.BaseSearch.handle_query" title="sphinx.websupport.search.BaseSearch.handle_query"><tt class="xref py py-meth docutils literal"><span class="pre">handle_query()</span></tt></a>) must be overridden in your subclass. For a working example, look at the built-in adapter for whoosh.</div></blockquote> <dl class="method"> <dt id="sphinx.websupport.search.BaseSearch.init_indexing"> <tt class="descclassname">BaseSearch.</tt><tt class="descname">init_indexing</tt><big>(</big><em>changed=</em><span class="optional">[</span><span class="optional">]</span><big>)</big><a class="headerlink" href="#sphinx.websupport.search.BaseSearch.init_indexing" title="Permalink to this definition">¶</a></dt> <dd><p>Called by the builder to initialize the search indexer. <cite>changed</cite> is a list of pagenames that will be reindexed. You may want to remove these from the search index before indexing begins.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>changed</strong> – a list of pagenames that will be re-indexed</td> </tr> </tbody> </table> </dd></dl> <dl class="method"> <dt id="sphinx.websupport.search.BaseSearch.finish_indexing"> <tt class="descclassname">BaseSearch.</tt><tt class="descname">finish_indexing</tt><big>(</big><big>)</big><a class="headerlink" href="#sphinx.websupport.search.BaseSearch.finish_indexing" title="Permalink to this definition">¶</a></dt> <dd><p>Called by the builder when writing has been completed. Use this to perform any finalization or cleanup actions after indexing is complete.</p> </dd></dl> <dl class="method"> <dt id="sphinx.websupport.search.BaseSearch.feed"> <tt class="descclassname">BaseSearch.</tt><tt class="descname">feed</tt><big>(</big><em>pagename</em>, <em>title</em>, <em>doctree</em><big>)</big><a class="headerlink" href="#sphinx.websupport.search.BaseSearch.feed" title="Permalink to this definition">¶</a></dt> <dd><p>Called by the builder to add a doctree to the index. Converts the <cite>doctree</cite> to text and passes it to <a class="reference internal" href="#sphinx.websupport.search.BaseSearch.add_document" title="sphinx.websupport.search.BaseSearch.add_document"><tt class="xref py py-meth docutils literal"><span class="pre">add_document()</span></tt></a>. You probably won’t want to override this unless you need access to the <cite>doctree</cite>. Override <a class="reference internal" href="#sphinx.websupport.search.BaseSearch.add_document" title="sphinx.websupport.search.BaseSearch.add_document"><tt class="xref py py-meth docutils literal"><span class="pre">add_document()</span></tt></a> instead.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> <li><strong>pagename</strong> – the name of the page to be indexed</li> <li><strong>title</strong> – the title of the page to be indexed</li> <li><strong>doctree</strong> – is the docutils doctree representation of the page</li> </ul> </td> </tr> </tbody> </table> </dd></dl> <dl class="method"> <dt id="sphinx.websupport.search.BaseSearch.add_document"> <tt class="descclassname">BaseSearch.</tt><tt class="descname">add_document</tt><big>(</big><em>pagename</em>, <em>title</em>, <em>text</em><big>)</big><a class="headerlink" href="#sphinx.websupport.search.BaseSearch.add_document" title="Permalink to this definition">¶</a></dt> <dd><p>Called by <a class="reference internal" href="#sphinx.websupport.search.BaseSearch.feed" title="sphinx.websupport.search.BaseSearch.feed"><tt class="xref py py-meth docutils literal"><span class="pre">feed()</span></tt></a> to add a document to the search index. This method should should do everything necessary to add a single document to the search index.</p> <p><cite>pagename</cite> is name of the page being indexed. It is the combination of the source files relative path and filename, minus the extension. For example, if the source file is “ext/builders.rst”, the <cite>pagename</cite> would be “ext/builders”. This will need to be returned with search results when processing a query.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> <li><strong>pagename</strong> – the name of the page being indexed</li> <li><strong>title</strong> – the page’s title</li> <li><strong>text</strong> – the full text of the page</li> </ul> </td> </tr> </tbody> </table> </dd></dl> <dl class="method"> <dt id="sphinx.websupport.search.BaseSearch.query"> <tt class="descclassname">BaseSearch.</tt><tt class="descname">query</tt><big>(</big><em>q</em><big>)</big><a class="headerlink" href="#sphinx.websupport.search.BaseSearch.query" title="Permalink to this definition">¶</a></dt> <dd><p>Called by the web support api to get search results. This method compiles the regular expression to be used when <a class="reference internal" href="#sphinx.websupport.search.BaseSearch.extract_context" title="sphinx.websupport.search.BaseSearch.extract_context"><tt class="xref py py-meth docutils literal"><span class="pre">extracting</span> <span class="pre">context</span></tt></a>, then calls <a class="reference internal" href="#sphinx.websupport.search.BaseSearch.handle_query" title="sphinx.websupport.search.BaseSearch.handle_query"><tt class="xref py py-meth docutils literal"><span class="pre">handle_query()</span></tt></a>. You won’t want to override this unless you don’t want to use the included <a class="reference internal" href="#sphinx.websupport.search.BaseSearch.extract_context" title="sphinx.websupport.search.BaseSearch.extract_context"><tt class="xref py py-meth docutils literal"><span class="pre">extract_context()</span></tt></a> method. Override <a class="reference internal" href="#sphinx.websupport.search.BaseSearch.handle_query" title="sphinx.websupport.search.BaseSearch.handle_query"><tt class="xref py py-meth docutils literal"><span class="pre">handle_query()</span></tt></a> instead.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>q</strong> – the search query string.</td> </tr> </tbody> </table> </dd></dl> <dl class="method"> <dt id="sphinx.websupport.search.BaseSearch.handle_query"> <tt class="descclassname">BaseSearch.</tt><tt class="descname">handle_query</tt><big>(</big><em>q</em><big>)</big><a class="headerlink" href="#sphinx.websupport.search.BaseSearch.handle_query" title="Permalink to this definition">¶</a></dt> <dd><p>Called by <a class="reference internal" href="#sphinx.websupport.search.BaseSearch.query" title="sphinx.websupport.search.BaseSearch.query"><tt class="xref py py-meth docutils literal"><span class="pre">query()</span></tt></a> to retrieve search results for a search query <cite>q</cite>. This should return an iterable containing tuples of the following format:</p> <div class="highlight-python"><pre>(<path>, <title>, <context>)</pre> </div> <p><cite>path</cite> and <cite>title</cite> are the same values that were passed to <a class="reference internal" href="#sphinx.websupport.search.BaseSearch.add_document" title="sphinx.websupport.search.BaseSearch.add_document"><tt class="xref py py-meth docutils literal"><span class="pre">add_document()</span></tt></a>, and <cite>context</cite> should be a short text snippet of the text surrounding the search query in the document.</p> <p>The <a class="reference internal" href="#sphinx.websupport.search.BaseSearch.extract_context" title="sphinx.websupport.search.BaseSearch.extract_context"><tt class="xref py py-meth docutils literal"><span class="pre">extract_context()</span></tt></a> method is provided as a simple way to create the <cite>context</cite>.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>q</strong> – the search query</td> </tr> </tbody> </table> </dd></dl> <dl class="method"> <dt id="sphinx.websupport.search.BaseSearch.extract_context"> <tt class="descclassname">BaseSearch.</tt><tt class="descname">extract_context</tt><big>(</big><em>text</em>, <em>length=240</em><big>)</big><a class="headerlink" href="#sphinx.websupport.search.BaseSearch.extract_context" title="Permalink to this definition">¶</a></dt> <dd><p>Extract the context for the search query from the document’s full <cite>text</cite>.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> <li><strong>text</strong> – the full text of the document to create the context for</li> <li><strong>length</strong> – the length of the context snippet to return.</li> </ul> </td> </tr> </tbody> </table> </dd></dl> </div> </div> </div> </div> </div> <div class="clearer"></div> </div> <div class="related"> <h3>Navigation</h3> <ul> <li class="right" style="margin-right: 10px"> <a href="../genindex.html" title="General Index" >index</a></li> <li class="right" > <a href="../py-modindex.html" title="Python Module Index" >modules</a> |</li> <li class="right" > <a href="storagebackends.html" title="Storage Backends" >next</a> |</li> <li class="right" > <a href="api.html" title="The WebSupport Class" >previous</a> |</li> <li><a href="../index.html">Sphinx home</a> | </li> <li><a href="../contents.html">Documentation</a> »</li> <li><a href="../websupport.html" >Sphinx Web Support</a> »</li> </ul> </div> <div class="footer"> © Copyright 2007-2011, Georg Brandl. Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3. </div> </body> </html>