我的遠距離目標是使用MySQL全文索引......但最接近的問題是將text
的使用與SQLAlchemy ORM相結合。使用`select()`與`text()`使用ORM相當於什麼?
假設我們有一個User
類繼承自聲明基礎,並在MySQL列name
上定義了全文索引。以下是工作原理:
from sqlalchemy import text
full_text = text('MATCH(name) AGAINST(\":name\") > :value')
filter_arg = full_text.params(name="John Jacob Jingleheimer Schmidt", value=1)
session.query(User).filter(filter_arg)
正如docs指出,使用text
與filter
和order_by
很簡單。我想實際選擇值。我想做什麼這是完全虛假的代碼看起來像它應該做到:
full_text = text('MATCH(name) AGAINST(\":name\")')
value = full_text.params(name="John Jacob Jingleheimer Schmidt")
session.query(User, value)
那是不行的,很明顯,但我希望這是不夠清楚暗示的目標是什麼?
另外這個擴展可能是有用的:https://github.com/mengzhuo/sqlalchemy-fulltext-search – van 2014-12-03 05:45:35
我剛剛知道自己Column.match,但它似乎只在工作MySQL的布爾模式。所以我無法獲取或過濾特定的值。我會看看擴展。 – Ian 2014-12-03 12:53:08
我不是全文搜索的專家,但布爾模式是構造查詢的方式,並且如您指定的那樣,它將完全匹配單個值。從文檔(http://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html):'(no operator) 默認情況下(當既不指定+也不指定) - 單詞是可選,但包含它的行的額定值更高。這模仿MATCH()... AGAINST()中沒有BOOLEAN MODE修飾符的行爲。' – van 2014-12-03 13:05:12