FTSModels for sqlite - weights in search() and search_bm25() don't work.
I found a bug in the Python implementation of the default rank() function...the Cython version worked fine, but the Python version wasn't respecting the weights parameter due to some careless variable naming on my part. When I run it locally, I now get the following output:

```python
(u'mario', -2.0)
(u'documento', -1.0)
(u'documento', u'mario', -0.0)
(u'mario', u'descrizione', -0.0)
```

This doesn't address your question about BM25, but the BM25 scoring function is actually unit-tested and I know from using it on my own projects that it does work. To ensure this, I've added an additional unit-test that specifically tests the weight parameter. You can view the code here: cfd5aee9f85352a7a7b0054467eaa0d6ad5b87d9

I think that perhaps the `0.` results are simply a result of the sample size being so constrained.
I'm having an issue using the sqlite_ext FTS extension.
That's the example of the documentation:

```from playhouse.signals import Model
from playhouse.sqlite_ext import SqliteExtDatabase, FTSModel, SearchField
from peewee import TextField

db = SqliteExtDatabase(':memory:', threadlocals=True)


class Document(Model):
    title = TextField(null=False, unique=True)
    content = TextField(null=False)

    class Meta:
        database = db


class DocumentIndex(FTSModel):
    title = SearchField()
    content = SearchField()

    class Meta:
        database = db
        extension_options = {'tokenize': 'porter'}


def store_document(document):
    DocumentIndex.insert({
        DocumentIndex.docid: document.id,
        DocumentIndex.title: document.title,
        DocumentIndex.content: document.content}).execute()


def search(phrase):
    docs = DocumentIndex.search(
        phrase,
        weights={'title': 2.0, 'content': 1.0},
        with_score=True,
        score_alias='search_score')

    for result in docs:
        print(result.title, result.search_score)


def search_bm25(phrase):
    best_bm25 = DocumentIndex.search_bm25(phrase,
                                          weights=[2.0, 1.0],
                                          with_score=True).tuples()

    for result in best_bm25:
        print(result)


Document.create_table(fail_silently=True)
DocumentIndex.create_table(fail_silently=True)
DocumentIndex.rebuild()
DocumentIndex.optimize()

if __name__ == '__main__':
    doc1 = Document.create(
        title="documento",
        content="mario")

    doc2 = Document.create(
        title="mario",
        content="descrizione")

    store_document(doc1)
    store_document(doc2)

    search('mario')

    search_bm25('mario')
```

The ouput given is not what I expect. 

```
documento -0.0
mario -0.0
('documento', 'mario', -0.0)
('mario', 'descrizione', -0.0)
```

Seems like when I put some weights inside the functions the calculated score is automatically set to -0.0.
Am I missing something?