我希望能夠在SQLite中使用FTS4搜索數字2.3,但是。正被視爲令牌邊界。寫一個完整的定製標記器沒有任何其他方式排除。從令牌邊界字符列表?如何停止。被視爲SQLite中的分隔符FTS4
能夠搜索十進制數似乎是一個常見用例,但我找不到與SO/Google相關的任何內容。目前我最好的解決辦法是全部取代。字符與字母,並相應地對每個搜索替代已知的(長)字符串文本...
彼得
我希望能夠在SQLite中使用FTS4搜索數字2.3,但是。正被視爲令牌邊界。寫一個完整的定製標記器沒有任何其他方式排除。從令牌邊界字符列表?如何停止。被視爲SQLite中的分隔符FTS4
能夠搜索十進制數似乎是一個常見用例,但我找不到與SO/Google相關的任何內容。目前我最好的解決辦法是全部取代。字符與字母,並相應地對每個搜索替代已知的(長)字符串文本...
彼得
標記生成器定義標記是什麼,所以你的確需要自己編寫。
您可以搜索短語"2 3"
,它將使用任何分隔符查找數字2和3。
其實你並不需要編寫自己的分詞器。
'簡單'分詞器允許定製分隔符,但它是一個未記錄的功能。
創建FTS表如下,和SQLite將令牌化的「」(空間)和「#」(井)中的字符:
CREATE VIRTUAL TABLE documents USING fts4(title, content, tokenize=simple '' '# ');
有這個功能SQLite的郵件列表上的討論在2012年here。 支持此功能的SQLite中的源代碼是here。從郵件列表就其缺乏文檔
報價:
「有可能的原因是,我們忘記了這個功能,即使存在 似乎在簡單的分詞器已經存在了,不變的,因爲。早在2006年就引入了FTS1。「
關於是否是安全的使用功能引用:
「但它已經在代碼了這麼久,現在我們不敢改變 ,生怕打破長期形成的計劃。 「
...但也有人提到該功能不太可能經過徹底測試。
我剛剛通過電子郵件發送了SQLite用戶郵件列表,詢問是否可以記錄此功能。
更新:我要添加的一件事是,我們發現如果將諸如'*'或' - '的字符配置爲這樣的分隔符,那麼它們也將被剝離出在查詢中的FTS MATCH子句。所以雖然這對''很好。它不能用於FTS MATCH中也是特殊字符的字符。
非常感謝這個答案。原始代碼已完成和部署,但下次我會嘗試您的建議:-) – Peter
嗨CL - 我想你是對的。我希望以前有人可能已經解決了這個問題,但我猜想在文本中搜索數字並不常見。我通過regexing(\ d +)\之前令牌化解決了我的目的。(\ d +),以$ 1XXUNIQUEPHRASEXX $ 2,做同樣的我的搜索文本。工作正常,但感覺uuuuguggglyly。事實上,由於本地化(和歐洲等),很難做到正確。感謝您的回覆 - 我很感激。 – Peter