2010-06-23 4 views
2

J'utilise whoosh pour la recherche en texte intégral,Comment obtenir toutes les « données d'index » à l'aide whoosh

et je veux savoir: comment obtenir toutes les « données d'index » qui a été ajouté.

Ceci est mon main.py:

import cgi,os 

from google.appengine.ext import webapp 
from google.appengine.ext.webapp import template 
from google.appengine.ext.webapp.util import run_wsgi_app 

from whoosh import store 
from whoosh.fields import Schema, STORED, ID, KEYWORD, TEXT 
from whoosh.index import getdatastoreindex 
from whoosh.qparser import QueryParser, MultifieldParser 
import logging 

SEARCHSCHEMA = Schema(content=TEXT(stored=True)) 

class BaseRequestHandler(webapp.RequestHandler): 
    def render_template(self, filename, template_args=None): 
    if not template_args: 
     template_args = {} 
    path = os.path.join(os.path.dirname(__file__), 'templates', filename) 
    self.response.out.write(template.render(path, template_args)) 

class MainPage(BaseRequestHandler): 
    def get(self): 
    self.render_template('index.html') 

class SearchPage(BaseRequestHandler): 
    def get(self): 
    ix = getdatastoreindex("hello", schema=SEARCHSCHEMA) 
    parser = QueryParser("content", schema = ix.schema) 
    q = parser.parse(self.request.get('query')) 
    results = ix.searcher().search(q) 
    a='' 
    for result in results: 
     a+=('<blockquote>%s</blockquote>' % 
           cgi.escape(result['content'])) 
    all=ix.schema 
    self.render_template('index.html',{'results':a,'all':all}) 

class Guestbook(BaseRequestHandler): 
    def post(self): 
    ix = getdatastoreindex("hello", schema=SEARCHSCHEMA) 
    writer = ix.writer() 
    writer.add_document(content=u"%s" % self.request.get('content')) 
    writer.commit() 
    self.redirect('/') 

application = webapp.WSGIApplication(
            [('/', MainPage), 
             ('/search', SearchPage), 
             ('/sign', Guestbook)], 
            debug=True) 

def main(): 
    run_wsgi_app(application) 

if __name__ == "__main__": 
    main() 

Et mon index.html est:

<form action="/search" method="get"> 
<div><input name="query" type="text" value=""><input type="submit" value="Search"></div> 
</form> 


<form action="/sign" method="post"> 
<div><textarea name="content" rows="3" cols="60"></textarea></div> 
<div><input type="submit" value="Sign Guestbook"></div> 
</form> 

{{results}} 

all data: 


{{all}} 
{% for i in all%} 
{{i}} 
{%endfor%} 
+1

Vous obtiendrez probablement plus, mieux, et des réponses plus rapides en demandant la liste de diffusion Whoosh à http://groups.google.com/ groupe/whoosh et êtes-vous sûr que ce n'est pas couvert dans les docs? http://packages.python.org/Whoosh/ –

+0

Qu'essayez-vous réellement d'accomplir? Essayer d'obtenir _all_ les données d'index dans une requête est une chose étrange à faire. –

+0

probablement le lien suivant peut vous aider: http://stackoverflow.com/questions/2395675/whoosh-index-viewer –

Répondre

0

Cette solution est testée sur Whoosh 2.7, mais pourrait fonctionner dans les versions précédentes, ainsi

Vous peut lister tous les résultats avec:

all_docs = ix.searcher().documents() 

Dans le modèle, vous pouvez itérer comme eux:

{% for doc in all_docs %} 
    {{ doc.content }} <!-- or any doc.field as field is in your schema --> 
{% endfor %} 
Questions connexes