2010-12-23 169 views
1

我不知道以下是否可能用於SQLite的fts(3/4)。 我創建了一個使用fts3的數據表。SQLite全文搜索目錄

如果我例如搜索e *我得到所有以^ e開始的所有內容 但是我還可以搜索索引/目錄中以e開頭的特定單詞嗎?

所以,我只是得到這個詞的結果回來像;艾略特,elo,eehh。

回答

2

http://www.sqlite.org/fts3.html#section_3

 SELECT * FROM docs WHERE docs MATCH 'lin*'; 

將返回包含開始 「林」 字的文檔。你只想要匹配的話,而不是上下文?也許「片段」功能會幫助你。你可能會發現感興趣的主題:

http://www.mail-archive.com/[email protected]/msg49345.html

+0

這將返回一組包含lin *的行,但是我想實現的是返回單詞由sqlite索引。因此,例如它應該返回你的例子中的linux,線性,linwhatever ...但不包含containt林* – Grezly 2010-12-23 15:24:37

2

的FTS引擎提供通過offsets虛函數的信息。

SELECT offsets(docs) FROM docs WHERE docs MATCH 'e*'; 

作爲文檔說:

對於使用全文索引SELECT查詢,()函數返回一個包含一系列空格隔開的整數的文本值的偏移量。對於當前行的每個詞組匹配中的每個詞,返回列表中有四個整數。每組四個整數解釋如下:

  1. 該術語實例出現的列號(0表示FTS表的最左列,1表示下一個最左邊的列,等等)。
  2. 全文查詢表達式中匹配項的詞彙編號。查詢表達式中的術語按其出現的順序從0開始編號。
  3. 列中匹配項的字節偏移量。
  4. 匹配項的大小(以字節爲單位)。

如何提取該信息取決於您以及如何將代碼與SQLite集成。

0

documentation of the snippet function對於其第6個參數比較模糊,因爲該算法使用最佳分數方法來查找片段。

不過在我的應用我得到的原有條款我期待與要求的清潔提取物:

select snippet(docs,'','','', -1, 1) from docs where docs match 'e*'; 

它可以在你的情況下幫助;這個數據庫內解決方案幫助我,因爲我不想提取位於db外的代碼中的術語。它適用於搜索單個單詞(沒有空格,或者,在MATCH查詢中)..