2013-03-13 3 views
1

Я использую полнотекстовый поиск, чтобы найти определенные элементы в огромной древовидной структуре. В большинстве случаев меня интересуют только совпадения элементов под узлом. Но когда я использую select * from MYTABLE, где соответствует «XXX», он выполняет полный текстовый поиск по всей древовидной структуре.Оптимизация полнотекстового поиска в SQLite

Есть ли способ указать строки в MYTABLE, которые будут использоваться для полнотекстового поиска? (т. е. для соответствия «XXX»). Любые подсказки будут оценены!

ответ

1

Единственные запросы, которые эффективно работают на таблицах FTS, - это MATCH, и ищет rowid/docid.

Таким образом, для поиска поддерева вы должны сделать идентификатор поддерева (корень из) части полного текста, который выполняется поиск. Обратите внимание, что большинство токенизаторов выбрасывают символы интерсунтуации, поэтому идентификатор должен быть предложением, в котором слова указывают путь от корня к поддереву. Например:

SELECT * 
FROM MyTable 
WHERE MyTable MATCH 'ID:"root 3 1 4" Text:whatever' 

Вы можете повысить селективность слов в ID, если вы включите уровень дерева в каждом слове:

SELECT * 
FROM MyTable 
WHERE MyTable MATCH 'ID:"1x3 2x1 3x4" Text:whatever' 
+0

Спасибо! Мне нужно больше работать, чтобы проголосовать за вас ... – user1482266

Смежные вопросы