2017-06-11 14 views
0

次のクエリを使用して、SQLiteを使用してテキスト検索を実行しています。SQLiteでのPeweeインデックス検索

​​

結果はDocumentIndexのランク付けされたリストです。この結果をDocumentテーブルと結合すると、元のランク付けされたオーダーを保存したDocumentのリストが返されます。

私は次のことを試してみました:

return Document.select().where(docs) 

をしかし、それは、私はこの種のものを処理することを好むonly a single result allowed

+0

私の答えは見ましたか?それがあなたのために働いた場合、あなたは理由や理由を教えてください。 – coleifer

答えて

1

方法は、フルテキストのdocid確実にするためであることを言っては動作しません。 -searchテーブルは、検索対象の主キーと同じです。

だから私は持っていると思います:

query = (Document 
     .select(Document, DocumentIndex.bm25().alias('score')) 
     .join(DocumentIndex, on=(Document.id == DocumentIndex.docid)) 
     .where(DocumentIndex.match(search_term)) 
     .order_by(SQL('score')) 

注:FTS3とFTS5ではなく、 "DOCID" の "ROWID" を使用し検索する際

class Document(Model): 
    content = TextField() 

class DocumentIndex(FTSModel): 
    docid = DocIDField() 
    content = TextField() 

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

document = Document.create(content='something') 
DocumentIndex.create(content=document.content, docid=document.id) 

をその後、私のような何かをしたいです。

関連する問題